I\'ve got a hash table:
$myHash = @{
\"key1\" = @{
\"Entry 1\" = \"one\"
\"Entry 2\" = \"two\"
}
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"])"
}
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.
You can also do this without a variable
@{
'foo' = 222
'bar' = 333
'baz' = 444
'qux' = 555
} | % getEnumerator | % {
$_.key
$_.value
}