共用方式為


ConvertFrom-StringData

將包含一或多個索引鍵和值組的字串轉換成哈希表。

語法

ConvertFrom-StringData
                [-StringData] <String>
                [<CommonParameters>]

Description

ConvertFrom-StringData Cmdlet 會將包含一或多個索引鍵和值組的字串轉換成哈希表。 由於每個索引鍵/值組都必須位於個別行上,因此這裡字串通常用來做為輸入格式。

ConvertFrom-StringData Cmdlet 會被視為可在腳本或函式之 DATA 區段中使用的安全 Cmdlet。 在 DATA 區段中使用時,字串的內容必須符合 DATA 區段的規則。 如需詳細資訊,請參閱about_Data_Sections。

ConvertFrom-StringData 支援傳統機器翻譯工具允許的逸出字元序列。 也就是說,Cmdlet 可以使用 Regex.Unescape 方法,將反斜杠 (\) 解譯為字串數據中的逸出字元,而不是通常發出腳本中行尾訊號的 Windows PowerShell 反引號字元 (')。 在 here-string 內,反引號字元無法運作。 您也可以使用前面的反斜杠來逸出結果中的常值反斜杠,如下所示: \\。 未逸出的反斜杠字元,例如檔案路徑中常用的反斜杠字元,可以在結果中轉譯為不合法的逸出序列。

範例

範例 1:將單引號的 here-string 轉換成哈希表

PS C:\> $Here = @'
Msg1 = The string parameter is required.
Msg2 = Credentials are required for this command.
Msg3 = The specified variable does not exist.
'@
PS C:\> ConvertFrom-StringData -StringData $Here
Name                           Value
----                           -----
Msg3                           The specified variable does not exist.
Msg2                           Credentials are required for this command.
Msg1                           The string parameter is required.

這些命令會將使用者訊息的單引號字串轉換成哈希表。 在單引號字串中,不會以變數取代值,而且不會評估表達式。

第一個命令會建立 here-string,並將它儲存在$Here 變數中。

第二個命令會使用 ConvertFrom-StringData Cmdlet,將$Here變數中的 here-string 轉換為哈希表。

範例 2:將雙引號的 here-string 轉換成哈希表

PS C:\> $P = @"
ISE = Windows PowerShell Integrated Scripting Environment
"@
PS C:\> $P | Get-Member
TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone()

PS C:\> $Hash = ConvertFrom-StringData -StringData $P
PS C:\> $Hash | Get-Member
TypeName: System.Collections.Hashtable
Name              MemberType            Definition
----              ----------            ----------
Add               Method                System.Void Add(Object key, Object

這些命令示範 ConvertFrom-StringData 實際上會將 here-string 轉換成哈希表。

第一個命令會建立雙引號 here-string,其中包含一個索引鍵/值組,並將它儲存在$P變數中。

第二個命令會使用管線運算符 (|) 將$P變數傳送至 Get-Member Cmdlet。 結果顯示$P為字串串 (System.String)。

第三個命令會使用 ConvertFrom-StringData Cmdlet,將$P中的 here-string 轉換成哈希表。 命令會將結果儲存在 $Hash 變數中。

最後一個命令會使用管線運算符 (|) 將$Hash變數傳送至 get-Member Cmdlet 。 結果顯示$Hash變數的內容是哈希表 (System.Collections.Hashtable)。

範例 3:將 here-string 轉換成哈希表

PS C:\> ConvertFrom-StringData -StringData @'
Name = Disks.ps1

# Category is optional.

Category = Storage
Cost = Free
'@
Name                           Value
----                           -----
Cost                           Free
Category                       Storage
Name                           Disks.ps1

此命令會將包含多個索引鍵/值組的單引號 here-string 轉換成哈希表。

在此命令中,StringData 參數的值是 here-string,而不是包含 here-string 的變數。 任一格式都有效。

here-string 包含其中一個字串的相關批注。 批注在字串中有效,前提是批注位於與索引鍵/值組不同的行上。

範例 4:將字串轉換成哈希表

PS C:\> $A = ConvertFrom-StringData -StringData "Top = Red `n Bottom = Blue"
PS C:\> "Top = " + $A.Top
Top = Red PS C:\> "Bottom = " + $A.Bottom
Bottom = Blue

本範例會將一般雙引號字串(而非 here-string)轉換成哈希表,並將它儲存在$A變數中。

若要滿足每個索引鍵/值組必須位於個別行的條件,它會使用 Windows PowerShell 換行符 ('n) 來分隔配對。

結果是輸入的哈希表。 其餘命令會顯示輸出。

範例 5:在腳本的 DATA 區段中使用 ConvertFrom-StringData

PS C:\> $TextMsgs = DATA {
ConvertFrom-StringData @'
Text001 = The $Notebook variable contains the name of the user's system notebook.
Text002 = The $MyNotebook variable contains the name of the user's private notebook.
'@
}
PS C:\> $TextMsgs.Text001
The $Notebook variable contains the name of the user's system notebook. PS C:\> $TextMsgs.Text002
The $MyNotebook variable contains the name of the user's private notebook.

此範例顯示腳本之 DATA 區段中所使用的 ConvertFrom-StringData 命令。 DATA 區段下方的語句會向用戶顯示文字。

因為文字包含變數名稱,所以它必須以單引號字串括住,以便以常值方式解譯變數,而不會展開變數。 DATA 區段中不允許變數。

範例 6:使用管線運算元傳遞字串

PS C:\> $Here = @'
Msg1 = The string parameter is required.
Msg2 = Credentials are required for this command.
Msg3 = The specified variable does not exist.
'@
PS C:\> $Hash = $Here | ConvertFrom-StringData
PS C:\> $Hash
Name     Value
----     -----
Msg3     The specified variable does not exist.
Msg2     Credentials are required for this command.
Msg1     The string parameter is required.

此範例示範您可以使用管線運算符 (|) 將字串傳送至 ConvertFrom-StringData

第一個命令會將 here-string 儲存在 $Here 變數中。 第二個命令會使用管線運算符 (|) 將$Here變數傳送至 ConvertFrom-StringData。 命令會將結果儲存在 $Hash 變數中。

最後一個命令會顯示$Hash變數的內容。

範例 7:使用逸出字元新增行並傳回字元

PS C:\> ConvertFrom-StringData @"
Vincentio = Heaven doth with us as we with torches do,\nNot light them for themselves; for if our virtues\nDid not go forth of us, 'twere all alike\nAs if we had them not.
Angelo = Let there be some more test made of my metal,\nBefore so noble and so great a figure\nBe stamp'd upon it.
"@ | Format-List
Name  : Angelo

Value : Let there be some more test made of my metal,
        Before so noble and so great a figure
        Be stamp'd upon it.

Name  : Vincentio
Value : Heaven doth with us as we with torches do,
        Not light them for themselves; for if our virtues
        Did not go forth of us, 'twere all alike
        As if we had them not.

此範例示範如何使用逸出字元來建立新的行,並在 ConvertFrom-StringData傳回字元。 在此範例中,逸出序列 \n 用於在文字區塊內建立新行(值,在產生的哈希表中),與名稱或專案相關聯(名稱,在產生的哈希表中)。

範例 8:使用反斜杠逸出字元正確轉譯檔案路徑

PS C:\> ConvertFrom-StringData "Message=Look in c:\\Windows\\System32"
Name                           Value
----                           -----
Message                        Look in c:\Windows\System32

這個範例示範如何使用字串數據中的反斜杠逸出字元,讓檔案路徑在產生的 轉換From-StringData 哈希表中正確轉譯。 雙反斜杠可確保常值反斜杠字元在哈希表輸出中正確轉譯。

參數

-StringData

指定要轉換的字串。 您可以使用此參數,或使用管線將字串傳送至 convertFrom-StringData 。 參數名稱是選擇性的。

此參數的值必須是以單引號括住的字串、以雙引號括住的字串,或是包含一或多個索引鍵/值組的 here-string。 每個索引鍵/值組都必須位於個別的行上,或每一組都必須以換行符 ('n) 分隔。

您可以在字串中包含批註,但批注不能與索引鍵/值組位於同一行。 批注不會包含在哈希表中。

here-string 是由一或多行所組成的字串,其中引號會以字面方式解譯。 如需詳細資訊,請參閱about_Quoting_Rules。

類型:String
Position:0
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:False

輸入

String

您可以使用管線將包含索引鍵/值組的字串傳送至 convertFrom-StringData

輸出

Hashtable

此 Cmdlet 會傳回它從索引鍵/值組建立的哈希表。

備註

  • here-string 是由一或多行所組成的字串,其中引號會以字面方式解譯。

    此 Cmdlet 在以多個口語語言顯示使用者訊息的腳本中很有用。 您可以使用字典樣式哈希表來隔離文字字串與程式代碼,例如在資源檔中,以及格式化文字字串以用於翻譯工具。