web-dev-qa-db-fra.com

Obtention de la clé de hachage actuelle dans une boucle ForEach-Object dans PowerShell

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?

15
Matt Simmons

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"])" 
}
36
Frode F.

Vous pouvez également le faire sans variable

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

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.

3
Zwan