Getting the current hash key in a ForEach-Object loop in powershell

≡放荡痞女 提交于 2019-12-20 17:42:19

问题


I've got a hash table:

$myHash = @{ 
   "key1" = @{
       "Entry 1" = "one"
       "Entry 2" = "two"
   }
   "key 2" = @{
       "Entry 1" = "three"
       "Entry 2" = "four"
   }
}

I'm doing a loop through to get the objects:

$myHash.keys | ForEach-Object {
    Write-Host $_["Entry 1"]
}

Works fine, but what can I use to figure out which of the keys of $myHash I'm in? $_.Name doesn't return anything. I'm stumped. Help?


回答1:


I like to use GetEnumerator() when looping a hashtable. It will give you a property value with the object, and a property key with it's key/name. Try:

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



回答2:


You can also do this without a variable

@{
  'foo' = 222
  'bar' = 333
  'baz' = 444
  'qux' = 555
} | % getEnumerator | % {
  $_.key
  $_.value
}



回答3:


here a similare function i used to read ini file.(the value are also a dictionary like yours).

ini file that i transform into hash look like this

[Section1]

key1=value1
key2=value2

[Section2]

key1=value1
key2=value2
key3=value3

From the ini the hashtable look like this (i passed the fonction that do the transformation in to hash):

$Inihash = @{ 
           "Section1" = @{
               "key1" = "value1"
               "key2" = " value2"
           }
           "Section2" = @{
               "key1" = "value1"
               "key2" = "value2"
         "key3" = "value3"
           }
        }

so from the hash table this line will search all the key/value for a given section:

$Inihash.GetEnumerator() |?{$_.Key -eq "Section1"} |% {$_.Value.GetEnumerator() | %{write-host $_.Key "=" $_.Value}} 

? = for search where-object equal my section name. % = you have to do 2 enumeration ! one for all the section and a second for get all the key in the section.



来源:https://stackoverflow.com/questions/14880725/getting-the-current-hash-key-in-a-foreach-object-loop-in-powershell

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!