ConvertFrom-String

從字串內容擷取和剖析結構化屬性。

Syntax

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

此命令會產生具有預設屬性名稱、 P1P2 的物件。

範例 1A:了解產生的物件

此命令會產生一個屬性 為 P1P2 的物件;根據預設,這兩個屬性都是 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方法時使用。

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

-IncludeExtent

表示此 Cmdlet 包含預設移除的範圍文字屬性。

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

-InputObject

指定從管線接收的字串,或包含字串物件的變數。

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-PropertyNames

指定要在結果物件中指派分割值的屬性名稱陣列。 您分割或剖析的每一行文字都會產生代表屬性值的專案。 如果專案是擷取群組的結果,而該擷取群組的名稱會命名為 (例如 (?<name>)(?'name') ),則會將該擷取群組的名稱指派給 屬性。

如果您提供 PropertyName 陣列中的任何元素,這些名稱會指派給尚未命名的屬性。

如果您提供的屬性名稱比有字段更多,PowerShell 會忽略額外的屬性名稱。 如果您未指定足夠的屬性名稱來命名所有欄位,PowerShell 會自動將數值屬性名稱指派給未命名的任何屬性: P1P2 等。

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

-TemplateContent

指定表達式或儲存為變數的表達式,描述此 Cmdlet 指派字串的屬性。 範本欄位規格的語法如下: {[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

指定檔案做為數位,其中包含字串所需剖析的範本。 在範本檔案中,屬性及其值會以括弧括住,如下所示。 如果屬性,例如 Name 屬性及其相關聯的其他屬性,出現多次,您可以新增星號 (*) 表示這會導致多個記錄。 這可避免將多個屬性擷取到單一記錄。

{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

指出此 Cmdlet 會將學習演算法的結果儲存至範本檔案中的批注。 這可讓演算法學習程式更快。 若要使用此參數,您也必須使用 TemplateFile 參數來指定範本檔案。

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

輸入

String

輸出

PSCustomObject

備註

Windows PowerShell 包含下列的 ConvertFrom-String別名:

  • CFS