J'ai une table de hachage:
$myHash = @{
"key1" = @{
"Entry 1" = "one"
"Entry 2" = "two"
}
"key 2" = @{
"Entry 1" = "three"
"Entry 2" = "four"
}
}
Je fais une boucle pour récupérer les objets:
$myHash.keys | ForEach-Object {
Write-Host $_["Entry 1"]
}
Fonctionne bien, mais que puis-je utiliser pour déterminer laquelle des touches de $myHash
J'en suis? $_.Name
ne renvoie rien. Je suis perplexe. Aidez-moi?
J'aime utiliser GetEnumerator()
lors de la boucle d'une table de hachage. Il vous donnera une propriété value
avec l'objet, et une propriété key
avec sa clé/nom. Essayer:
$myHash.GetEnumerator() | % {
Write-Host "Current hashtable is: $($_.key)"
Write-Host "Value of Entry 1 is: $($_.value["Entry 1"])"
}
Vous pouvez également le faire sans variable
@{
'foo' = 222
'bar' = 333
'baz' = 444
'qux' = 555
} | % getEnumerator | % {
$_.key
$_.value
}
ici une fonction similaire que j'ai utilisée pour lire le fichier ini (les valeurs sont aussi un dictionnaire comme le vôtre).
fichier ini que je transforme en hachage ressemble à ceci
[Section1]
key1=value1
key2=value2
[Section2]
key1=value1
key2=value2
key3=value3
De l'ini, la table de hachage ressemble à ceci (j'ai passé la fonction qui fait la transformation en hachage):
$Inihash = @{
"Section1" = @{
"key1" = "value1"
"key2" = " value2"
}
"Section2" = @{
"key1" = "value1"
"key2" = "value2"
"key3" = "value3"
}
}
donc à partir de la table de hachage, cette ligne recherchera toutes les clés/valeurs d'une section donnée:
$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.