在powershell中的ForEach-Object循环中获取当前哈希键

Mat*_*ons 15 powershell hashtable

我有一个哈希表:

$myHash = @{ 
   "key1" = @{
       "Entry 1" = "one"
       "Entry 2" = "two"
   }
   "key 2" = @{
       "Entry 1" = "three"
       "Entry 2" = "four"
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在循环来获取对象:

$myHash.keys | ForEach-Object {
    Write-Host $_["Entry 1"]
}
Run Code Online (Sandbox Code Playgroud)

工作正常,但我可以用什么来弄清楚$myHash我在哪个键?$_.Name没有任何回报.我很难过.救命?

Fro*_* F. 36

我喜欢GetEnumerator()在循环哈希表时使用.它将为您提供一个value包含该对象的属性,以及一个key包含该键/ 属性的属性.尝试:

$myHash.GetEnumerator() | % { 
    Write-Host "Current hashtable is: $($_.key)"
    Write-Host "Value of Entry 1 is: $($_.value["Entry 1"])" 
}
Run Code Online (Sandbox Code Playgroud)


小智 5

你也可以在没有变量的情况下这样做

@{
  'foo' = 222
  'bar' = 333
  'baz' = 444
  'qux' = 555
} | % getEnumerator | % {
  $_.key
  $_.value
}
Run Code Online (Sandbox Code Playgroud)