ConvertFrom-String
Hiermee worden gestructureerde eigenschappen uit tekenreeksinhoud geëxtraheerd en geparseerd.
Syntaxis
ConvertFrom-String
[-Delimiter <String>]
[-PropertyNames <String[]>]
[-InputObject] <String>
[<CommonParameters>]
ConvertFrom-String
[-TemplateFile <String[]>]
[-TemplateContent <String[]>]
[-IncludeExtent]
[-UpdateTemplate]
[-InputObject] <String>
[<CommonParameters>]
Description
De ConvertFrom-String cmdlet extraheert en parseert gestructureerde eigenschappen uit tekenreeksinhoud. Met deze cmdlet wordt een object gegenereerd door tekst van een traditionele tekststroom te parseren. Voor elke tekenreeks in de pijplijn splitst de cmdlet de invoer door een scheidingsteken of een parseringsexpressie en wijst vervolgens eigenschapsnamen toe aan elk van de resulterende gesplitste elementen. U kunt deze eigenschapsnamen opgeven; Als u dat niet doet, worden deze automatisch voor u gegenereerd.
De standaardparameterset van de cmdlet, ByDelimiter, splitst exact op het scheidingsteken voor reguliere expressies. Er wordt geen overeenkomende aanhalingstekens of scheidingstekens uitgevoerd, zoals de Import-Csv cmdlet wel doet.
De alternatieve parameterset van de cmdlet, TemplateParsing, genereert elementen van de groepen die worden vastgelegd met een reguliere expressie.
Deze cmdlet ondersteunt twee modi: eenvoudige door scheidingstekens gescheiden parsering en automatisch gegenereerde, voorbeeldgestuurde parsering.
Door scheidingstekens gescheiden parseren splitst standaard de invoer op witruimte en wijst eigenschapsnamen toe aan de resulterende groepen. U kunt het scheidingsteken aanpassen door de ConvertFrom-String resultaten in een van de cmdlets Format-* te gebruiken of u kunt de parameter Scheidingsteken gebruiken.
De cmdlet biedt ook ondersteuning voor automatisch gegenereerde, voorbeeldgestuurde parsering op basis van de FlashExtract, onderzoekwerk van Microsoft Research.
Voorbeelden
Voorbeeld 1: Een object genereren met standaardeigenschapsnamen
PS C:\> "Hello World" | ConvertFrom-String
P1 P2
-- --
Hello World
PS C:\>
Met deze opdracht wordt een object gegenereerd met standaardeigenschapsnamen, P1 en P2. De resultaten zijn P1="Hallo" en P2="Wereld".
Voorbeeld 1A: Kennismaken met het gegenereerde object
PS C:\> "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
PS C:\>
Met de opdracht wordt één object gegenereerd met eigenschappen P1, P2; beide eigenschappen zijn standaard van het type 'tekenreeks'.
Voorbeeld 2: Een object genereren met standaardeigenschapsnamen met behulp van een scheidingsteken
PS C:\> "Hello World" | ConvertFrom-String -Delimiter "ll"
P1 P2
-- --
He o World
PS C:\>
Met deze opdracht wordt een object gegenereerd met de eigenschappen P1="He" en P2="o World" door de 'll' in Hello op te geven als het scheidingsteken.
Voorbeeld 3: Een object genereren dat twee benoemde eigenschappen bevat
PS C:\> "Hello World" | ConvertFrom-String -PropertyNames FirstWord, SecondWord
FirstWord SecondWord
--------- ----------
Hello World
PS C:\>
Met deze opdracht wordt een object gegenereerd dat twee eigenschappen bevat:
- FirstWord-, met de waarde 'Hallo'
- SecondWord-, met de waarde 'Wereld'
Voorbeeld 4: Gebruik een expressie als de waarde van de parameter TemplateContent en sla de resultaten op in een variabele.
$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
'@
$testText |
ConvertFrom-String -TemplateContent $template -OutVariable PersonalData |
Out-Null
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
C:\ >
Met deze opdracht wordt een expressie gebruikt als de waarde van de parameter TemplateContent. De expressie wordt voor het gemak opgeslagen in een variabele. Windows PowerShell begrijpt nu dat de tekenreeks die in de pijplijn wordt gebruikt om te ConvertFrom-String drie eigenschappen heeft:
- naam
- telefoon
- leeftijd
Elke regel in de invoer wordt geëvalueerd door de voorbeeldovereenkomsten; als de lijn overeenkomt met de voorbeelden in het patroon, worden waarden geëxtraheerd en doorgegeven aan de gedefinieerde uitvoervariabele.
De voorbeeldgegevens, $template, bieden twee verschillende telefoonindelingen:
- 425-123-6789
- (206) 987-4321
En twee verschillende leeftijdsindelingen:
- 6
- 12
Dit impliceert dat telefoons zoals (206) 987 4321 niet worden herkend, omdat er geen voorbeeldgegevens zijn die overeenkomen met dat patroon (er is geen afbreekstreepje tussen de drie cijfersreeks en de vier cijferreeks). Vergelijkbaar met 3 of meer leeftijden van cijfers, worden ze niet herkend.
Voorbeeld 5: Gegevenstypen opgeven voor de gegenereerde eigenschappen
$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
'@
$testText |
ConvertFrom-String -TemplateContent $template -OutVariable PersonalData | Out-Null
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
C:\ >
Dit is hetzelfde voorbeeld als nr. 4 hierboven; de enige verschillen zijn in de patroontekenreeks die een gegevenstype voor elke gewenste eigenschap bevat. Let op het verschil in uitlijning voor de kolom leeftijd tussen beide voorbeelden.
Voorbeeld 5A: Kennismaken met het gegenereerde object
$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
'@
$testText |
ConvertFrom-String -TemplateContent $template -OutVariable PersonalData |
Out-Null
$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
C:\ >
Get-Member geeft aan dat de leeftijd van het type geheel getal is.
Parameters
-Delimiter
Hiermee geeft u een reguliere expressie die de grens tussen elementen identificeert. Elementen die door de splitsing worden gemaakt, worden eigenschappen in het resulterende object. Het scheidingsteken wordt uiteindelijk gebruikt in een aanroep naar System.Text.RegularExpressions.RegularExpression.Split().
Type: | String |
Aliassen: | DEL |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-IncludeExtent
Geeft aan dat deze cmdlet een teksteigenschap voor gebieden bevat die standaard wordt verwijderd.
Type: | SwitchParameter |
Aliassen: | IE |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-InputObject
Hiermee geeft u tekenreeksen op die zijn ontvangen van de pijplijn of een variabele die een tekenreeksobject bevat.
Type: | String |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-PropertyNames
Hiermee geeft u een matrix van eigenschapsnamen waaraan gesplitste waarden in het resulterende object moeten worden toegewezen. Elke tekstregel die u splitst of parseert, genereert elementen die eigenschapswaarden vertegenwoordigen. Als het element het resultaat is van een capture-groep en die capturegroep een naam heeft (bijvoorbeeld (?<name>)
of (?'name')
), wordt de naam van die capture-groep toegewezen aan de eigenschap.
Als u elementen opgeeft in de PropertyName matrix, worden deze namen toegewezen aan eigenschappen die nog niet zijn benoemd.
Als u meer eigenschapsnamen opgeeft dan er velden zijn, worden de extra eigenschapsnamen genegeerd in Windows PowerShell. Als u niet voldoende eigenschapsnamen opgeeft om alle velden een naam te geven, wijst Windows PowerShell automatisch numerieke eigenschapsnamen toe aan eigenschappen die niet de naam hebben: P1, P2, enzovoort.
Type: | String[] |
Aliassen: | PN |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-TemplateContent
Hiermee geeft u een expressie of een expressie op die is opgeslagen als een variabele, die de eigenschappen beschrijft waaraan deze cmdlet tekenreeksen toewijst. De syntaxis van een sjabloonveldspecificatie is het volgende: {[optional-typecast]name(sequence-spec, bijvoorbeeld *):example-value}. Een voorbeeld is {PersonInfo*:{Name:Patti Fuller}.
Type: | String[] |
Aliassen: | TC |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-TemplateFile
Hiermee geeft u een bestand op, als matrix, dat een sjabloon bevat voor de gewenste parsering van de tekenreeks. In het sjabloonbestand worden eigenschappen en de bijbehorende waarden tussen vierkante haken geplaatst, zoals wordt weergegeven in het volgende voorbeeld. Als een eigenschap, zoals de eigenschap Name en de bijbehorende andere eigenschappen, meerdere keren wordt weergegeven, kunt u een sterretje (*) toevoegen om aan te geven dat dit resulteert in meerdere records. Dit voorkomt dat meerdere eigenschappen in één record worden geëxtraheerd.
{Name*:D avid Chew}
{City:Redmond}, {State:WA}
{Naam*:Evan Narvaez} {Naam*:Antonio Moreno}
{Plaats:Issaquah}, {Staat:WA}
Type: | String[] |
Aliassen: | TF |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-UpdateTemplate
Geeft aan dat deze cmdlet de resultaten van een leeralgoritmen opslaat in een opmerking in het sjabloonbestand. Hierdoor verloopt het leerproces van het algoritme sneller. Als u deze parameter wilt gebruiken, moet u ook een sjabloonbestand opgeven met de parameter TemplateFile.
Type: | SwitchParameter |
Aliassen: | UT |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |