私はハッシュテーブルを持っています:
$myHash = @{
"key1" = @{
"Entry 1" = "one"
"Entry 2" = "two"
}
"key 2" = @{
"Entry 1" = "three"
"Entry 2" = "four"
}
}
オブジェクトを取得するためにループを実行しています:
$myHash.keys | ForEach-Object {
Write-Host $_["Entry 1"]
}
正常に動作しますが、$myHash
のどのキーが使用されているかを知るために何を使用できますか? $_.Name
は何も返しません。私は困惑しています。助けて?
ハッシュテーブルをループするときにGetEnumerator()
を使用するのが好きです。プロパティvalue
とオブジェクト、プロパティkey
とそのキー/名前を取得します。試してください:
$myHash.GetEnumerator() | % {
Write-Host "Current hashtable is: $($_.key)"
Write-Host "Value of Entry 1 is: $($_.value["Entry 1"])"
}
変数なしでもこれを行うことができます
@{
'foo' = 222
'bar' = 333
'baz' = 444
'qux' = 555
} | % getEnumerator | % {
$_.key
$_.value
}
ここで私がiniファイルを読み取るために使用した同様の関数です(値もあなたのような辞書です)。
ハッシュに変換したiniファイルはこんな感じ
[Section1]
key1=value1
key2=value2
[Section2]
key1=value1
key2=value2
key3=value3
Iniから、ハッシュテーブルは次のようになります(ハッシュに変換する関数を渡しました)。
$Inihash = @{
"Section1" = @{
"key1" = "value1"
"key2" = " value2"
}
"Section2" = @{
"key1" = "value1"
"key2" = "value2"
"key3" = "value3"
}
}
したがって、ハッシュテーブルからこの行は、指定されたセクションのすべてのキー/値を検索します。
$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.