ConvertFrom-String
從字串內容擷取和剖析結構化屬性。
語法
ConvertFrom-String
[-Delimiter <String>]
[-PropertyNames <String[]>]
[-InputObject] <String>
[<CommonParameters>]
ConvertFrom-String
[-TemplateFile <String[]>]
[-TemplateContent <String[]>]
[-IncludeExtent]
[-UpdateTemplate]
[-InputObject] <String>
[<CommonParameters>]
Description
Cmdlet ConvertFrom-String
會從字串內容擷取和剖析結構化屬性。 此 Cmdlet 會藉由剖析傳統文字數據流中的文字來產生 物件。 對於管線中的每個字串,Cmdlet 會以分隔符或剖析表示式分割輸入,然後將屬性名稱指派給每個產生的分割專案。 您可以提供這些屬性名稱;如果您未這麼做,系統會自動為您產生它們。
Cmdlet 的預設參數集 ByDelimiter 會完全分割正則表示式分隔符。 它不會像 Cmdlet 一樣 Import-Csv
執行引號比對或分隔符逸出。
Cmdlet 的替代參數集 TemplateParsing 會從正則表示式所擷取的群組產生元素。 如需正則表達式的詳細資訊,請參閱 about_Regular_Expressions。
此 Cmdlet 支援兩種模式:基本分隔剖析,以及自動產生的範例驅動剖析。
根據預設,分隔剖析會分割空格符的輸入,並將屬性名稱指派給產生的群組。
您可以將結果管 ConvertFrom-String
入其中 Format-*
一個 Cmdlet,或使用 Delimiter 參數來自定義分隔符 。
Cmdlet 也支持根據 FlashExtract 自動產生的範例驅動剖析,Microsoft Research 的研究工作。
範例
範例 1:產生具有預設屬性名稱的物件
"Hello World" | ConvertFrom-String
P1 P2
-- --
Hello World
此命令會產生具有預設屬性名稱、 P1 和 P2 的物件。
範例 1A:了解產生的物件
此命令會產生一個屬性 為 P1、 P2 的物件;根據預設,這兩個屬性都是 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
範例 2:使用分隔符產生具有預設屬性名稱的物件
此命令會使用反斜杠 (\
) 作為分隔符,產生具有網域和使用者名稱的物件。 反斜杠字元在使用正則表達式時,必須使用另一個反斜杠逸出。
"Contoso\Administrator" | ConvertFrom-String -Delimiter "\\"
P1 P2
-- --
Contoso Administrator
範例 3:產生物件,其中包含兩個具名屬性
下列範例會從 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
Cmdlet 會將 Get-Content
Windows 主機檔案的內容儲存在 中 $content
。 第二個命令會使用符合任何開頭為 (#
) 行的正則表達式,移除 hosts 檔案開頭的任何批注。 最後一個命令會將其餘文字轉換成具有 伺服器 和 IP 屬性的物件。
範例 4:使用表示式作為 TemplateContent 參數的值,將結果儲存在變數中。
此命令會使用表達式作為 TemplateContent 參數的值。 為了簡單起見,表達式會儲存在變數中。 Windows PowerShell 現在了解管線 ConvertFrom-String
上使用的字串具有三個屬性:
- 名稱
- 電話
- 年齡
$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
輸入中的每個行都會由範例相符項目進行評估。 如果這一行符合模式中提供的範例,則會擷取值並傳遞至輸出變數。
範例資料 $template
提供兩種不同的手機格式:
425-123-6789
(206) 987-4321
範例資料也提供兩種不同的年齡格式:
6
12
這表示不會辨識像 這樣的 (206) 987 4321
手機,因為沒有符合該模式的範例數據,因為沒有連字元。
範例 5:指定所產生屬性的數據類型
這與上述範例 4 相同。 差異在於模式字串包含每個所需屬性的數據類型。
$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
Get-Member
Cmdlet 用來顯示 age 屬性是整數。
參數
-Delimiter
指定識別項目之間界限的正則表達式。 分割所建立的項目會成為結果物件中的屬性。 分隔符最終會在呼叫 類型的[System.Text.RegularExpressions.RegularExpression]
Split方法時使用。
類型: | String |
別名: | DEL |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-IncludeExtent
表示此 Cmdlet 包含預設移除的範圍文字屬性。
類型: | SwitchParameter |
別名: | IE |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-InputObject
指定從管線接收的字串,或包含字串物件的變數。
類型: | String |
Position: | 0 |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
-PropertyNames
指定要在結果物件中指派分割值的屬性名稱陣列。 您分割或剖析的每一行文字都會產生代表屬性值的專案。 如果專案是擷取群組的結果,而該擷取群組的名稱會命名為 (例如 (?<name>)
或 (?'name')
),則會將該擷取群組的名稱指派給 屬性。
如果您提供 PropertyName 陣列中的任何元素,這些名稱會指派給尚未命名的屬性。
如果您提供的屬性名稱比有字段更多,PowerShell 會忽略額外的屬性名稱。 如果您未指定足夠的屬性名稱來命名所有欄位,PowerShell 會自動將數值屬性名稱指派給未命名的任何屬性: P1、 P2 等。
類型: | String[] |
別名: | PN |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-TemplateContent
指定表達式或儲存為變數的表達式,描述此 Cmdlet 指派字串的屬性。 範本欄位規格的語法如下: {[optional-typecast]<name>:<example-value>}
。
類型: | String[] |
別名: | TC |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-TemplateFile
指定檔案做為數位,其中包含字串所需剖析的範本。 在範本檔案中,屬性及其值會以括弧括住,如下所示。 如果屬性,例如 Name 屬性及其相關聯的其他屬性,出現多次,您可以新增星號 (*
) 表示這會導致多個記錄。 這可避免將多個屬性擷取到單一記錄。
{Name*:D avid Chew}{City:Redmond}, {State:WA} {Name*:Evan Narvaez} {Name*:Antonio Moreno} {City:Issaquah}, {State:WA}
類型: | String[] |
別名: | TF |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-UpdateTemplate
指出此 Cmdlet 會將學習演算法的結果儲存至範本檔案中的批注。 這可讓演算法學習程式更快。 若要使用此參數,您也必須使用 TemplateFile 參數來指定範本檔案。
類型: | SwitchParameter |
別名: | UT |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
輸入
輸出
備註
Windows PowerShell 包含下列的 ConvertFrom-String
別名:
CFS