Powershell不会返回哈希表键值



我有一个作为哈希表的变量:

PS C:depotcoderp4vm> $skey

key              value
---              -----
Splitter version 5.2.P1(a.362)
OS version       VMkernel na1-pdesx09

我试图访问密钥的值,但我似乎无法访问。无论我如何寻址,我都一无所获:

PS C:depotcoderp4vm> $skey."Splitter version"
PS C:depotcoderp4vm> $skey["Splitter version"]

我检查了一下它是否有密钥和值对:

PS C:depotcoderp4vm> $skey.key
Splitter version
OS version
PS C:depotcoderp4vm> $skey.value
5.2.P1(a.362)
VMkernel na1-pdesx09.americas.global-legal.com 

我正在运行PowerShell 7,关于如何处理哈希表的帮助文件中似乎没有其他任何更改。有人知道我如何获取信息吗?

您所拥有的绝对是而不是哈希表。更有可能是对象的数组,其属性keyvalue与类似

$skey = [PsCustomObject]@{'key' = 'Splitter version'; 'value' = '5.2.P1(a.362)'},
[PsCustomObject]@{'key' = 'OS version'; 'value' = 'VMkernel na1-pdesx09'}

演示:

$skey | ForEach-Object {
Write-Host ('{0} = {1}' -f $_.key, $_.value)
}

应显示

拆分器版本=5.2.P1(a.362(操作系统版本=VMkernel na1-desx09

如果您喜欢,可以转换为哈希表:

$hash = @{}
$skey | ForEach-Object {
$hash[$_.key] = $_.value
}

在手机上输入这个,所以希望格式正确

为了补充@Theo的答案,我怀疑这实际上涉及KeyValuePair对象的列表,比如:

$skey = 
(new-object 'System.Collections.Generic.KeyValuePair[String, String]' 'Splitter version', '5.2.P1(a.362)'),
(new-object 'System.Collections.Generic.KeyValuePair[String, String]' 'OS version', 'VMkernel na1-pdesx09'),
(new-object 'System.Collections.Generic.KeyValuePair[String, String]' 'OS version', 'VMkernel na2-other')

无论如何,哈希表和[KeyValuePair](或[pscustomobject](对象列表之间的区别在于,对象列表不需要唯一的键(如上面的示例所示(。这意味着问题可能是将它们转换为哈希表,可能会覆盖重复的键。

要从列表中检索特定密钥,请使用:

($skey | Where key -eq 'Splitter version').Value
5.2.P1(a.362)

或多个键:

($skey | Where key -eq 'OS version').Value
VMkernel na1-pdesx09
VMkernel na2-other

最新更新