Powershell哈希表键属性不返回键 - 它返回一个KeyCollection对象

时间:2014-10-24 16:42:09

标签: powershell

如果我创建一个哈希表,然后尝试按键查询它,它就不会检索它们。这是因为密钥实际上不是单个密钥,而是称为" KeyCollection"。我如何获得实际密钥?

$states = @{1=2} #This creates the hashtable

$states.keys[0] #This returned 1

$States.get_item($states.keys[0]) # This returned nothing (expected 1)

$States.keys[0].getType() #This returned "KeyCollection" as the Name.

有人可以向我解释为什么它" KeyCollection"而不是1,以及如何获得String?

2 个答案:

答案 0 :(得分:2)

然后你需要使用get_enumerator,如下所示:

$states = @{"Alaska"="Big"}
$states.GetEnumerator() | ForEach-Object {
    Write-Host "Key: $($_.Key)"
    Write-Host "Value: $($states[$_.Key])"
}

答案 1 :(得分:1)

我认为发生的事情是KeyCollection没有索引器,因此PowerShell将[0]的使用解释为尝试访问数组中的项目,而KeyCollection被视为单个项目一个数组。

您可以使用ForEach-Object循环键:

$states.Keys | foreach { Write-Host "Key: $_, Value: $($states[$_])" }