共用方式為


ConvertFrom-String

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

Syntax

ConvertFrom-String
                [-Delimiter <String>]
                [-PropertyNames <String[]>]
                [-InputObject] <String>
                [<CommonParameters>]
ConvertFrom-String
                [-TemplateFile <String[]>]
                [-TemplateContent <String[]>]
                [-IncludeExtent]
                [-UpdateTemplate]
                [-InputObject] <String>
                [<CommonParameters>]

Description

ConvertFrom-String Cmdlet 會從字串內容中擷取和剖析結構化屬性。 此 Cmdlet 會藉由剖析傳統文字數據流中的文字來產生物件。 針對管線中的每個字串,Cmdlet 會以分隔符或剖析表示式分割輸入,然後將屬性名稱指派給每個產生的分割專案。 您可以提供這些屬性名稱;如果您不這麼做,系統會自動為您產生它們。

Cmdlet 的預設參數集 ByDelimiter 會完全分割正則表示式分隔符。 它不會執行引號比對或分隔符逸出,因為 Import-Csv Cmdlet。

Cmdlet 的替代參數集 TemplateParsing 會從正則表示式所擷取的群組產生元素。

此 Cmdlet 支援兩種模式:基本分隔的剖析,以及自動產生的範例驅動剖析。

根據預設,分隔的剖析將輸入從空白字元位置分割,並將屬性名稱指派給產生的群組。 您可以將 ConvertFrom-String 結果管線傳送到其中一個 Format-* Cmdlet,或使用 Delimiter 參數來自定義 分隔符

Cmdlet 也支持根據 FlashExtract、Microsoft Research 研究工作自動產生的範例驅動剖析。

範例

範例 1:產生具有預設屬性名稱的物件

PS C:\> "Hello World" | ConvertFrom-String

P1    P2
--    --
Hello World


PS C:\>

此命令會產生具有預設屬性名稱 P1 和 P2 的物件。 結果為 P1=“Hello” 和 P2=“World”。

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

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:\>

命令會產生一個屬性為 P1、P2 的物件;根據預設,這兩個屬性都是 『string』 類型。

範例 2:使用分隔符產生具有預設屬性名稱的物件

PS C:\> "Hello World" | ConvertFrom-String -Delimiter "ll"

P1 P2
-- --
He o World


PS C:\>

此命令會在 Hello 中指定 'll' 做為分隔符,以產生 P1=“He” 和 P2=“o World” 屬性的物件。

範例 3:產生包含兩個具名屬性的物件

PS C:\> "Hello World" | ConvertFrom-String -PropertyNames FirstWord, SecondWord

FirstWord SecondWord
--------- ----------
Hello     World


PS C:\>

此指令會產生包含兩個屬性的物件:

  • FirstWord,值為 “Hello”
  • SecondWord,值為 “World”

範例 4:使用表示式作為 TemplateContent 參數的值,將結果儲存在變數中。

$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:\ >

此命令使用表達式做為 TemplateContent 參數的值。 為了簡單起見,表達式會儲存在變數中。 Windows PowerShell 瞭解管線上用來 ConvertFrom-String 的字元串有三個屬性:

  • 名稱
  • 電話
  • 年齡

輸入中的每個行都會由範例相符項目進行評估;如果行符合模式中提供的範例,則會擷取值並傳遞至定義的輸出變數。

範例數據 $template提供兩種不同的手機格式:

  • 425-123-6789
  • (206) 987-4321

而且,兩種不同的年齡格式:

  • 6
  • 12

這表示無法辨識 (206) 987 4321 等手機,因為沒有符合該模式的範例數據, (三位數序列與四位數序列之間沒有連字元) 。 與 3 或更多數位年齡類似,將無法辨識這些年齡。

範例 5:指定所產生屬性的數據類型

$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:\ >

這與上述第 4 個範例相同;唯一的差異在於模式字串,其中包含每個所需屬性的數據類型。 請注意這兩個範例之間的年齡數據行對齊差異。

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

$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 顯示年齡是整數類型。

參數

-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 陣列中的任何元素,這些名稱會指派給尚未命名的屬性。

如果您提供的屬性名稱超過欄位,Windows PowerShell 會忽略額外的屬性名稱。 如果您未指定足夠的屬性名稱來命名所有欄位,Windows PowerShell 會自動將數值屬性名稱指派給任何未命名的屬性:P1、P2 等。

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

-TemplateContent

指定表達式或儲存為變數的表達式,描述此 Cmdlet 指派字串的屬性。 範本字段規格的語法如下:{[optional-typecast]name (sequence-spec,例如 *) :example-value}。 例如{PersonInfo*:{Name:Patti Fuller}。

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

-TemplateFile

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

{Name*:D avid :D

{City:Redmond}, {State:WA}

{Name*:Evan Narvaez}{Name*:Certification 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