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

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


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"])" }


You can also do this without a variable

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


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=value1key2=value2[Section2]key1=value1key2=value2key3=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.