有没有办法将powershell字符串转换为哈希表?

Joh*_*abs 4 powershell

有什么方法可以告诉powershell从使用正常语法格式化的字符串构造一个哈希表来内联创建哈希表?

例如,有没有办法做这样的事情:

$fooHashString = "@{key='value'}
$fooHash = TellPowershellToEvaluateSpecialStringExpressions($fooHashString)
$fooHash

Name                           Value
----                           -----
key                            value
Run Code Online (Sandbox Code Playgroud)

Joh*_*abs 6

嗯,发布此内容后不久,我偶然发现了答案。我只需要在字符串上使用“Invoke-Expression”命令。

$fooHashString = "@{key='value'}"
$fooHash = Invoke-Expression $fooHashString
$fooHash

Name                           Value
----                           -----
key                            value
Run Code Online (Sandbox Code Playgroud)

  • 代码的第一行缺少结束双引号 (4认同)

ger*_*ard 6

使用 Invoke-Expression 被视为代码异味的原因有很多。有关此内容的详细信息,请参阅以下博客文章

如果您使用 PowerShell 3.0 或更高版本,另一种方法是使用 ConvertFrom-StringData。您可以在 MSDN 页面ConvertFrom-StringData上找到有关如何使用它的详细信息

在您的情况下,您可以使用以下内容来创建 HashTable

$HashString = "key1=value1 `n key2=value2"
ConvertFrom-StringData -StringData $HashString
Run Code Online (Sandbox Code Playgroud)

或者,您可以像这样在此处的字符串中生成内容

$HashString = @'
key1 = value1
key2 = value2
'@
ConvertFrom-StringData -StringData $HashString
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果您包含\在字符串中,这将不起作用,因为ConvertFrom-StringDataCmdLet 将其视为转义字符。