将包含一个或多个键-值对的字符串转换为哈希表。
语法
ConvertFrom-StringData [-StringData] <string> [<CommonParameters>]
说明
ConvertFrom-StringData cmdlet 将包含一个或多个键-值对的字符串转换为哈希表。由于每个键-值对必须位于一个单独的行上,所以经常使用 here-string 作为输入格式。
可将 ConvertFrom-StringData cmdlet 视为可在脚本或函数的 DATA 节中使用的安全 cmdlet。在 DATA 节中使用时,字符串的内容必须遵循 DATA 节的规则。有关详细信息,请参阅 about_Data_Sections。
参数
-StringData <string>
指定要转换的字符串。可使用该参数或通过管道将字符串传递至 ConvertFrom-StringData。参数名为可选项。
该参数的值必须是括在单引号中的字符串(单引号字符串)或括在双引号中的字符串(双引号字符串),或包含一个或多个键-值对的 here-string。每个键-值对必须位于一个单独的行上,或每个键-值对必须由换行符 (`n) 分隔。
字符串中可包括注释,但是注释不能以键-值对的形式位于同一行上。哈希表中不包括注释。
here-string 是由一行或多行组成的字符串,在其中,按照字义解释引号。有关详细信息,请参阅 about_Quoting_Rules。
是否为必需? |
true |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
true (ByValue) |
是否接受通配符? |
false |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
System.String 可将包含一个键-值对的字符串通过管道传送至 ConvertFrom-StringData。 |
输出 |
System.Collections.Hashtable ConvertFrom-StringData 返回它基于键-值对创建的哈希表。 |
说明
here-string 是由一行或多行组成的字符串,在其中,按照字义解释引号。有关详细信息,请参阅 about_Quoting_Rules。
在以多种口语显示用户消息的脚本中,ConvertFrom-StringData 非常有用。可使用字典风格的哈希表来从代码中隔离文本字符串(如在资源文件中),并为文本字符串设置格式以便在转换工具中使用。
示例 1
C:\PS>$here = @' Msg1 = The string parameter is required. Msg2 = Credentials are required for this command. Msg3 = The specified variable does not exist. '@ C:\PS> 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-string 转换为哈希表。
示例 2
C:\PS>$p = @" ISE = Windows PowerShell Integrated Scripting Environment "@ C:\PS> $p | get-member TypeName: System.String Name MemberType Definition ---- ---------- ---------- Clone Method System.Object Clone() ... C:\PS> $hash = convertfrom-stringdata -stringdata $p C:\PS> $hash | get-member TypeName: System.Collections.Hashtable Name MemberType Definition ---- ---------- ---------- Add Method System.Void Add(Object key, Object ... 说明 ----------- 这些命令表明 ConvertFrom-StringData 实际上是将 here-string 转换为一个哈希表。 第一个命令创建一个带双引号的 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
C:\PS>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
C:\PS>$a = convertfrom-stringdata -stringdata "Top = Red `n Bottom = Blue" C:\PS> "Top = " + $a.Top Top = Red C:\PS> "Bottom = " + $a.Bottom Bottom = Blue 说明 ----------- 此示例将一个带双引号的常规字符串(非 here-string)转换为一个哈希表,并将其保存在 $a 变量中。 为了满足每个键-值对必须在一个单独的行上的条件,它使用 Windows PowerShell 换行符 (`n) 来分隔这些对。 结果为一个由输入内容组成的哈希表。其余命令显示输出内容。
示例 5
C:\PS>$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. '@ } C:\PS> $TextMsgs.Text001 The $Notebook variable contains the name of the user's system notebook. C:\PS> $TextMsgs.Text002 The $MyNotebook variable contains the name of the user's private notebook. 说明 ----------- 此示例演示了在脚本的 DATA 节中使用的 ConvertFrom-StringData 命令。DATA 节下面的语句向用户显示该文本。 由于文本包括变量名称,所以必须用单引号将它括起来,以便按照字义解释变量,而不是展开它。在 DATA 节中允许使用变量。
示例 6
C:\PS>$here = @' Msg1 = The string parameter is required. Msg2 = Credentials are required for this command. Msg3 = The specified variable does not exist. '@ C:\PS> $hash = $here | convertfrom-stringdata C:\PS> $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 变量的内容。
另请参阅