ConvertFrom-String
Extrahuje a analyzuje strukturované vlastnosti z obsahu řetězce.
Syntaxe
ConvertFrom-String
[-Delimiter <String>]
[-PropertyNames <String[]>]
[-InputObject] <String>
[<CommonParameters>]
ConvertFrom-String
[-TemplateFile <String[]>]
[-TemplateContent <String[]>]
[-IncludeExtent]
[-UpdateTemplate]
[-InputObject] <String>
[<CommonParameters>]
Description
Rutina ConvertFrom-String
extrahuje a analyzuje strukturované vlastnosti z obsahu řetězce. Tato rutina vygeneruje objekt parsováním textu z tradičního textového streamu. Pro každý řetězec v kanálu rutina rozdělí vstup oddělovačem nebo parsovacím výrazem a potom přiřadí názvy vlastností každému výslednému rozděleném elementu. Tyto názvy vlastností můžete zadat; pokud ne, automaticky se vygenerují za vás.
Výchozí sada parametrů rutiny ByDelimiter se rozdělí přesně na oddělovač regulárních výrazů. Neprovádí porovnávání uvozovek ani eskadér oddělovač, jak to dělá rutina Import-Csv
.
Alternativní sada parametrů rutiny TemplateParsing generuje prvky ze skupin zachycených regulárním výrazem. Další informace o regulárních výrazech najdete v tématu about_Regular_Expressions.
Tato rutina podporuje dva režimy: základní parsování s oddělovači a automaticky generované, například řízené analýzy.
Parsování s oddělovači ve výchozím nastavení rozdělí vstup na prázdné místo a přiřadí názvy vlastností výsledným skupinám.
Oddělovač můžete přizpůsobit propojením ConvertFrom-String
výsledků do jedné z Format-*
rutin nebo můžete použít parametr Oddělovač .
Tato rutina také podporuje automaticky generované ukázkové parsování založené na flashExtract, výzkumné práci společnosti Microsoft Research.
Příklady
Příklad 1: Vygenerování objektu s výchozími názvy vlastností
"Hello World" | ConvertFrom-String
P1 P2
-- --
Hello World
Tento příkaz vygeneruje objekt s výchozími názvy vlastností, P1 a P2.
Příklad 1A: Seznámení s vygenerovaným objektem
Tento příkaz vygeneruje jeden objekt s vlastnostmi P1, P2; obě vlastnosti jsou ve výchozím nastavení typu String.
"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
Příklad 2: Vygenerování objektu s výchozími názvy vlastností pomocí oddělovače
Tento příkaz vygeneruje objekt s doménou a uživatelským jménem pomocí zpětného lomítka (\
) jako oddělovače. Znak zpětného lomítka musí být při použití regulárních výrazů uchvácený pomocí jiného zpětného lomítka.
"Contoso\Administrator" | ConvertFrom-String -Delimiter "\\"
P1 P2
-- --
Contoso Administrator
Příklad 3: Vygenerování objektu, který obsahuje dvě pojmenované vlastnosti
Následující příklad vytvoří objekty ze systému Windows hostuje položky souboru.
$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
Rutina Get-Content
ukládá obsah souboru hostitelů Windows do $content
souboru . Druhý příkaz odebere všechny komentáře na začátku souboru hosts pomocí regulárního výrazu, který odpovídá libovolnému řádku, který nezačíná (#
). Poslední příkaz převede zbývající text na objekty s vlastnostmi serveru a IP adresy.
Příklad 4: Jako hodnotu parametru TemplateContent použijte výraz, uložte výsledky do proměnné.
Tento příkaz používá výraz jako hodnotu parametru TemplateContent . Výraz je uložen v proměnné pro jednoduchost. Windows PowerShell teď chápe, že řetězec použitý v kanálu ConvertFrom-String
má tři vlastnosti:
- Název
- Telefon
- věk
$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
Každý řádek ve vstupu se vyhodnotí podle shody vzorku. Pokud řádek odpovídá příkladům zadaným ve vzoru, hodnoty se extrahují a předají výstupní proměnné.
Ukázková data $template
poskytují dva různé formáty telefonu:
425-123-6789
(206) 987-4321
Ukázková data také poskytují dva různé věkové formáty:
6
12
To znamená, že telefony (206) 987 4321
jako nebudou rozpoznány, protože neexistují žádná ukázková data, která odpovídají tomuto vzoru, protože neexistují žádné spojovníky.
Příklad 5: Určení datových typů do vygenerovaných vlastností
Jedná se o stejný příklad jako příklad 4 výše. Rozdíl je v tom, že řetězec vzoru obsahuje datový typ pro každou požadovanou vlastnost.
$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
Rutina Get-Member
slouží k zobrazení, že vlastnost stáří je celé číslo.
Parametry
-Delimiter
Určuje regulární výraz, který identifikuje hranici mezi prvky. Prvky vytvořené rozdělením se stanou vlastnostmi ve výsledném objektu. Oddělovač se nakonec používá ve volání Metody Split typu [System.Text.RegularExpressions.RegularExpression]
.
Typ: | String |
Aliasy: | DEL |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-IncludeExtent
Označuje, že tato rutina obsahuje vlastnost rozsahu textu, která je ve výchozím nastavení odebrána.
Typ: | SwitchParameter |
Aliasy: | IE |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-InputObject
Určuje řetězce přijaté z kanálu nebo proměnnou, která obsahuje objekt řetězce.
Typ: | String |
Position: | 0 |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | True |
Přijmout zástupné znaky: | False |
-PropertyNames
Určuje pole názvů vlastností, kterým se mají přiřadit rozdělené hodnoty ve výsledném objektu. Každý řádek textu, který rozdělíte nebo parsujete, generuje prvky, které představují hodnoty vlastností. Pokud je prvkem výsledek skupiny zachycení a tato skupina zachycení je pojmenovaná (například (?<name>)
(?'name')
) a název této skupiny zachycení je přiřazen k vlastnosti.
Pokud do pole PropertyName zadáte nějaké prvky, přiřadí se tyto názvy vlastnostem, které ještě nebyly pojmenovány.
Pokud zadáte více názvů vlastností, než jsou pole, PowerShell ignoruje názvy dalších vlastností. Pokud nezadáte dostatek názvů vlastností pro pojmenování všech polí, PowerShell automaticky přiřadí názvy číselných vlastností všem vlastnostem, které nemají název: P1, P2 atd.
Typ: | String[] |
Aliasy: | PN |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-TemplateContent
Určuje výraz nebo výraz uložený jako proměnnou, který popisuje vlastnosti, kterým tato rutina přiřazuje řetězce. Syntaxe specifikace pole šablony je následující: {[optional-typecast]<name>:<example-value>}
.
Typ: | String[] |
Aliasy: | TC |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-TemplateFile
Určuje soubor jako pole, který obsahuje šablonu pro požadovanou analýzu řetězce. V souboru šablony jsou vlastnosti a jejich hodnoty uzavřeny v hranatých závorkách, jak je znázorněno níže. Pokud se vlastnost, například vlastnost Name a její přidružené další vlastnosti, zobrazí několikrát, můžete přidat hvězdičku (*
), která označuje, že výsledkem je více záznamů. Tím se zabrání extrahování více vlastností do jednoho záznamu.
{Name*:D avid Chew} {City:Redmond}, {State:WA} {Name*:Evan Narvaez} {Name*:Antonio Moreno} {City:Issaquah}, {State:WA}
Typ: | String[] |
Aliasy: | TF |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-UpdateTemplate
Označuje, že tato rutina ukládá výsledky algoritmu učení do komentáře v souboru šablony. Díky tomu je proces učení algoritmu rychlejší. Chcete-li použít tento parametr, musíte také zadat soubor šablony s parametrem TemplateFile .
Typ: | SwitchParameter |
Aliasy: | UT |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
Vstupy
Výstupy
Poznámky
Windows PowerShell obsahuje následující aliasy pro ConvertFrom-String
:
CFS