ConvertFrom-StringData

将包含一个或多个键-值对的字符串转换为哈希表。

语法

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

说明

ConvertFrom-StringData cmdlet 将包含一个或多个键和值对的字符串转换为哈希表。 由于每个键-值对必须位于一个单独的行上,所以经常使用 here-string 作为输入格式。

ConvertFrom-StringData cmdlet 被视为可在脚本或函数的 DATA 节中使用的安全 cmdlet。 在 DATA 节中使用时,字符串的内容必须遵循 DATA 节的规则。 有关详细信息,请参阅 about_Data_Sections。

ConvertFrom-StringData 支持传统机器翻译工具允许的转义字符序列。 也就是说,cmdlet 可以使用 Regex.Unescape 方法将 (\) 反斜杠解释为字符串数据中的转义字符,而不是Windows PowerShell反斜杠字符 (“) ,这通常表示脚本中行的末尾。 在 here-string 中,反撇号字符无效。 还可以通过使用前面的反斜杠转义文本反斜杠,在结果中保留文本反斜杠,如下所示:\\。 未转义的反斜杠字符(例如那些通常用在文件路径中的反斜杠字符)可以在结果中呈现为非法的转义序列。

示例

示例 1:将单引号的 here 字符串转换为哈希表

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-string 并将其保存在 $Here 变量中。

第二个命令使用 ConvertFrom-StringData cmdlet 将 $Here 变量中的 here 字符串转换为哈希表。

示例 2:将双引号的 here 字符串转换为哈希表

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 字符串,并将其保存在 $P 变量中。

第二个命令使用管道运算符 (|) 将 $P 变量发送到 Get-Member cmdlet。 结果显示,$P是 System.String) (字符串。

第三个命令使用 ConvertFrom-StringData cmdlet 将 $P 中的 here 字符串转换为哈希表。 命令将结果存储在 $Hash 变量中。

最后一个命令使用管道运算符 (|) 将 $Hash 变量发送到 Get-Member cmdlet。 结果显示,$Hash变量的内容是一个哈希表, (System.Collections.Hashtable) 。

示例 3:将 here 字符串转换为哈希表

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 字符串,而不是包含 here 字符串的变量。 两种格式都有效。

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

此示例演示如何使用字符串数据中的反斜杠转义字符,以允许文件路径在生成的 ConvertFrom-StringData 哈希表中正确呈现。 双反斜杠可确保文本反斜杠字符正确呈现在哈希表输出中。

参数

-StringData

指定要转换的字符串。 可以使用此参数或通过管道将字符串传递给 ConvertFrom-StringData。 参数名为可选项。

此参数的值必须是用单引号括起来的字符串、用双引号括起来的字符串,或者包含一个或多个键/值对的 here-string。 每个键-值对都必须位于一个单独的行上,或每个键-值对都必须由换行符 (`n) 分隔。

字符串中可包括注释,但是注释不能以键-值对的形式位于同一行上。 哈希表中不包括注释。

here-string 是由一行或多行组成的字符串,在其中,按照字义解释引号。 有关详细信息,请参阅 about_Quoting_Rules。

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

输入

String

可以通过管道将包含键/值对的字符串传递给 ConvertFrom-StringData

输出

Hashtable

此 cmdlet 返回它从键/值对创建的哈希表。

备注

  • here-string 是由一行或多行组成的字符串,在其中,按照字义解释引号。

    此 cmdlet 可用于以多种口语显示用户消息的脚本。 可使用字典风格的哈希表来从代码中隔离文本字符串(如在资源文件中),并为文本字符串设置格式以便在转换工具中使用。