15

私はハッシュテーブルを持っています:

$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何も返しません。私は困惑しています。ヘルプ?

4

3 に答える 3

37

GetEnumerator()ハッシュテーブルをループするときに使用するのが好きです。valueオブジェクトのプロパティと、そのkeyキー/名前のプロパティが提供されます。試す:

$myHash.GetEnumerator() | % { 
    Write-Host "Current hashtable is: $($_.key)"
    Write-Host "Value of Entry 1 is: $($_.value["Entry 1"])" 
}
于 2013-02-14T18:02:00.200 に答える
3

ここで、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.

于 2015-09-30T08:43:32.557 に答える