ConvertFrom-String
Estrae e analizza le proprietà strutturate dal contenuto stringa.
Sintassi
ConvertFrom-String
[-Delimiter <String>]
[-PropertyNames <String[]>]
[-InputObject] <String>
[<CommonParameters>]
ConvertFrom-String
[-TemplateFile <String[]>]
[-TemplateContent <String[]>]
[-IncludeExtent]
[-UpdateTemplate]
[-InputObject] <String>
[<CommonParameters>]
Descrizione
Il ConvertFrom-String
cmdlet estrae e analizza le proprietà strutturate dal contenuto della stringa. Questo cmdlet genera un oggetto analizzando il testo da un flusso di testo tradizionale. Per ogni stringa nella pipeline, il cmdlet suddivide l'input in base a un delimitatore o a un'espressione di analisi e quindi assegna i nomi delle proprietà a ognuno degli elementi di divisione risultanti. È possibile specificare questi nomi di proprietà; in caso contrario, vengono generati automaticamente.
Il set di parametri predefinito del cmdlet, ByDelimiter, divide esattamente sul delimitatore di espressione regolare. Non esegue l'escape di corrispondenza tra virgolette o delimitatori perché il Import-Csv
cmdlet esegue.
Il set di parametri alternativi del cmdlet, TemplateParsing, genera elementi dai gruppi acquisiti da un'espressione regolare. Per altre informazioni sulle espressioni regolari, vedere about_Regular_Expressions.
Questo cmdlet supporta due modalità: l'analisi delimitata di base e l'analisi guidata dall'esempio generata automaticamente.
L'analisi delimitata divide l'input per impostazione predefinita in corrispondenza di spazi vuoti e assegna i nomi delle proprietà ai gruppi risultanti.
È possibile personalizzare il delimitatore eseguendo il piping dei ConvertFrom-String
risultati in uno dei Format-*
cmdlet oppure è possibile usare il parametro Delimiter .
Il cmdlet supporta anche l'analisi generata automaticamente, basata su esempio basata su FlashExtract, il lavoro di ricerca di Microsoft Research.
Esempio
Esempio 1: Generare un oggetto con nomi di proprietà predefiniti
"Hello World" | ConvertFrom-String
P1 P2
-- --
Hello World
Questo comando genera un oggetto con nomi di proprietà predefiniti, P1 e P2.
Esempio 1A: Ottenere informazioni sull'oggetto generato
Questo comando genera un oggetto con proprietà P1, P2; entrambe le proprietà sono di tipo String, per impostazione predefinita.
"Hello World" | ConvertFrom-String | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
P1 NoteProperty string P1=Hello
P2 NoteProperty string P2=World
Esempio 2: Generare un oggetto con nomi di proprietà predefiniti usando un delimitatore
Questo comando genera un oggetto con un dominio e un nome utente usando la barra rovesciata (\
) come delimitatore. Il carattere barra rovesciata deve essere preceduto da un'altra barra rovesciata quando si usano espressioni regolari.
"Contoso\Administrator" | ConvertFrom-String -Delimiter "\\"
P1 P2
-- --
Contoso Administrator
Esempio 3: Generare un oggetto contenente due proprietà denominate
Nell'esempio seguente vengono creati oggetti da voci di file host di Windows.
$content = Get-Content C:\Windows\System32\drivers\etc\hosts
$content = $content -match "^[^#]"
$content | ConvertFrom-String -PropertyNames IP, Server
IP Server
-- ------
192.168.7.10 W2012R2
192.168.7.20 W2016
192.168.7.101 WIN8
192.168.7.102 WIN10
Il Get-Content
cmdlet archivia il contenuto di un file host di Windows in $content
. Il secondo comando rimuove tutti i commenti all'inizio del file hosts usando un'espressione regolare che corrisponde a qualsiasi riga che non inizia con (#
). L'ultimo comando converte il testo rimanente in oggetti con proprietà Server e IP .
Esempio 4: usare un'espressione come valore del parametro TemplateContent, salvare i risultati in una variabile.
Questo comando usa un'espressione come valore del parametro TemplateContent . L'espressione viene salvata in una variabile per semplicità. Windows PowerShell riconosce ora che la stringa usata nella pipeline per ConvertFrom-String
avere tre proprietà:
- Nome
- Telefono
- età
$template = @'
{Name*:Phoebe Cat}, {phone:425-123-6789}, {age:6}
{Name*:Lucky Shot}, {phone:(206) 987-4321}, {age:12}
'@
$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111) 222-3333, 1
'@
$PersonalData = $testText | ConvertFrom-String -TemplateContent $template
Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData
Pet items found: 4
Name phone age
---- ----- ---
Phoebe Cat 425-123-6789 6
Lucky Shot (206) 987-4321 12
Elephant Wise 425-888-7766 87
Wild Shrimp (111) 222-3333 1
Ogni riga nell'input viene valutata dalla corrispondenza dell'esempio. Se la riga corrisponde agli esempi specificati nel modello, i valori vengono estratti e passati alla variabile di output.
I dati di esempio, $template
, forniscono due formati di telefono diversi:
425-123-6789
(206) 987-4321
I dati di esempio forniscono anche due formati di età diversi:
6
12
Ciò implica che i telefoni come (206) 987 4321
non verranno riconosciuti, perché non esistono dati di esempio che corrispondono a tale modello perché non ci sono trattini.
Esempio 5: Specifica dei tipi di dati per le proprietà generate
Questo è lo stesso esempio dell'esempio 4 precedente. La differenza è che la stringa del criterio include un tipo di dati per ogni proprietà desiderata.
$template = @'
{[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
{[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
'@
$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111) 222-3333, 1
'@
$PersonalData = $testText | ConvertFrom-String -TemplateContent $template
Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData
Pet items found: 4
Name phone age
---- ----- ---
Phoebe Cat 425-123-6789 6
Lucky Shot (206) 987-4321 12
Elephant Wise 425-888-7766 87
Wild Shrimp (111) 222-3333 1
$PersonalData | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
age NoteProperty int age=6
Name NoteProperty string Name=Phoebe Cat
phone NoteProperty string phone=425-123-6789
Il Get-Member
cmdlet viene usato per indicare che la proprietà age è un numero intero.
Parametri
-Delimiter
Specifica un'espressione regolare che identifica il limite tra gli elementi. Gli elementi creati dalla divisione diventano proprietà nell'oggetto risultante. Il delimitatore viene infine usato in una chiamata al metodo Split del tipo [System.Text.RegularExpressions.RegularExpression]
.
Tipo: | String |
Alias: | DEL |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-IncludeExtent
Indica che questo cmdlet include una proprietà di testo extent che viene rimossa per impostazione predefinita.
Tipo: | SwitchParameter |
Alias: | IE |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-InputObject
Specifica le stringhe ricevute dalla pipeline o una variabile che contiene un oggetto stringa.
Tipo: | String |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-PropertyNames
Specifica una matrice di nomi di proprietà a cui assegnare valori suddivisi nell'oggetto risultante. Ogni riga di testo divisa o analizzata genera elementi che rappresentano i valori delle proprietà. Se l'elemento è il risultato di un gruppo di acquisizione e tale gruppo di acquisizione è denominato (ad esempio, (?<name>)
o (?'name')
), il nome del gruppo di acquisizione viene assegnato alla proprietà .
Se si specificano elementi nella matrice PropertyName , tali nomi vengono assegnati alle proprietà che non sono ancora state denominate.
Se si specificano più nomi di proprietà rispetto ai campi, PowerShell ignora i nomi di proprietà aggiuntivi. Se non si specificano nomi di proprietà sufficienti per denominare tutti i campi, PowerShell assegna automaticamente nomi numerici di proprietà a tutte le proprietà non denominate: P1, P2 e così via.
Tipo: | String[] |
Alias: | PN |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-TemplateContent
Specifica un'espressione o un'espressione salvata come variabile che descrive le proprietà a cui questo cmdlet assegna stringhe. La sintassi di una specifica di campo modello è la seguente: {[optional-typecast]<name>:<example-value>}
.
Tipo: | String[] |
Alias: | TC |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-TemplateFile
Specifica un file, come matrice, che contiene un modello per l'analisi desiderata della stringa. Nel file modello le proprietà e i relativi valori sono racchiusi tra parentesi quadre, come illustrato di seguito. Se una proprietà, ad esempio la proprietà Name e le altre proprietà associate, viene visualizzata più volte, è possibile aggiungere un asterisco (*
) per indicare che ciò comporta più record. In questo modo si evita di estrarre più proprietà in un singolo record.
{Name*:D avid Chew} {City:Redmond}, {State:WA} {Name*:Evan Narvaez} {Name*:Antonio Moreno} {City:Issaquah}, {State:WA}
Tipo: | String[] |
Alias: | TF |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-UpdateTemplate
Indica che questo cmdlet salva i risultati di un algoritmo di apprendimento in un commento nel file modello. Questo rende il processo di apprendimento dell'algoritmo più veloce. Per usare questo parametro, è necessario specificare anche un file modello con il parametro TemplateFile .
Tipo: | SwitchParameter |
Alias: | UT |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
Output
Note
Windows PowerShell include gli alias seguenti per ConvertFrom-String
:
CFS