我有一个作为哈希表的变量:
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,关于如何处理哈希表的帮助文件中似乎没有其他任何更改。有人知道我如何获取信息吗?
您所拥有的绝对是而不是哈希表。更有可能是对象的数组,其属性key
和value
与类似
$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