有没有一种方法将PowerShell字符串转换为哈希表?

5
有没有办法告诉PowerShell从格式化为创建哈希表的常规语法的字符串中构建哈希表?
例如,有没有办法像这样做:
```powershell $hashTableString = @" Name=John Age=30 City=New York "@ $hashTable = ConvertFrom-StringData $hashTableString ``` 请注意,保留HTML标记。
$fooHashString = "@{key='value'}
$fooHash = TellPowershellToEvaluateSpecialStringExpressions($fooHashString)
$fooHash

Name                           Value
----                           -----
key                            value
4个回答

7

嗯,在发布这篇文章后不久,我偶然发现了答案。我只需要在字符串上使用"Invoke-Expression"命令就可以了。

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

Name                           Value
----                           -----
key                            value

4
你的代码第一行缺少一个双引号的闭合。 - Jan
@taclight 现在好些了吗? - Alex Gordon

6

使用Invoke-Expression被认为是一种代码异味的原因有很多。请参阅以下博客文章了解详情:

如果您使用的是3.0或更高版本的PowerShell,则可以使用ConvertFrom-StringData作为替代方法。您可以在MSDN页面上找到如何使用它的详细信息:ConvertFrom-StringData

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

$HashString = "key1=value1 `n key2=value2"
ConvertFrom-StringData -StringData $HashString

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

$HashString = @'
key1 = value1
key2 = value2
'@
ConvertFrom-StringData -StringData $HashString

很遗憾,如果在字符串中包含\,这种方法是行不通的,因为ConvertFrom-StringData命令会将其视为转义字符。


0

0
$fooHashString = "@{key='value'}" 
$fooHashString -replace '@{' -replace '}' -replace ';',"`n" -replace "'" |
  ConvertFrom-StringData

Name                           Value
----                           -----
key                            value

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接