Condividi tramite


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].

Type:String
Aliases:DEL
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeExtent

Indica che questo cmdlet include una proprietà di testo extent che viene rimossa per impostazione predefinita.

Type:SwitchParameter
Aliases:IE
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Specifica le stringhe ricevute dalla pipeline o una variabile che contiene un oggetto stringa.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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.

Type:String[]
Aliases:PN
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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>}.

Type:String[]
Aliases:TC
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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}

Type:String[]
Aliases:TF
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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 .

Type:SwitchParameter
Aliases:UT
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

String

Output

PSCustomObject

Note

Windows PowerShell include gli alias seguenti per ConvertFrom-String:

  • CFS