J'essaie de récupérer une valeur à partir d'une table de hachage comme celle ci-dessous.
# Without variables (Example): $Hashtable1AuthTestID.BID_XPI # With variables (Example): $<Hashtable><Type><Environment>.<Method> $hashtable = "Hashtable1" $type = "Auth" $environment = "Test" $method = "BID_XPI" # ID is the example is a string. $'$hashtable1'$environment"ID".$method $$hashtable1$environment+"ID".$method
Cela fonctionne bien si j'utilise $ Hashtable1AuthTestID.BID_XPI
mais depuis sera un script générique pour plusieurs types différents de données (et d'environnements) Je voudrais inclure plusieurs variables lorsque j'appelle la table de hachage comme celle ci-dessous.
$Hashtable1AuthTestID = @{ "BID_XPI" = "(id 2)"; "MBID_XPI" = "(id 3)"; "T_XPI" = "(id 4)"; "ST_XPI" = "(id 5)"; "SI_XPI" = "(id 6)"; "T_SAML" = "(id 7)"; "ST_SAML" = "(id 8)"; "SI_SAML" = "(id 9)"; "BID_SAML" = "(id 10)"; "MBID_SAML" = "(id 11)"; }
I ' J'ai testé plusieurs approches différentes mais je n'arrive pas à la faire fonctionner. J'obtiens la syntaxe correcte (si j'imprime les valeurs des variables) telles que $ Hashtable1AuthTestID.BID_XPI
mais je n'obtiens pas la valeur réelle de la table de hachage ((id 2)). p>
3 Réponses :
Vous pouvez utiliser Get-Variable
:
$hashtable = "Hashtable1" $type = "Auth" $environment = "Test" $method = "BID_XPI" (Get-Variable -Name "$($hashtable)$($type)$($environment)ID".).Value.$method
Référencer des variables nommées individuellement en utilisant un nom d'une autre variable - bien que possible - est une approche erronée. Ne fais pas ça. La manière canonique de traiter de telles situations est d'utiliser soit un tableau, si vous voulez accéder à la structure de données, soit un objet par index:
$Hashtable1AuthTestID = @{ "BID_XPI" = "(id 2)" "MBID_XPI" = "(id 3)" ... } $hashtable = 'Hashtable1' $type = 'Auth' $environment = 'Test' $method = 'BID_XPI' $name = "${hashtable}${type}${environment}ID" (Get-Variable -Name $name -ValueOnly).$method
ou une table de hachage, si vous voulez accéder à structure de données ou objet par nom:
$hashtables = @{} $hashtables['Hashtable1AuthTestID'] = @{ "BID_XPI" = "(id 2)" "MBID_XPI" = "(id 3)" ... } $hashtable = 'Hashtable1' $type = 'Auth' $environment = 'Test' $method = 'BID_XPI' $name = "${hashtable}${type}${environment}ID" $hashtables.$name.$method
Par souci d'exhaustivité, voici comment obtenir une variable en utilisant un nom d'une autre variable, mais encore une fois, ceci n'est PAS RECOMMANDÉ.
$hashtables = @() $hashtables += @{ "BID_XPI" = "(id 2)" "MBID_XPI" = "(id 3)" ... } $hashtables[0].MBID_XPI
Si vous parvenez à l'imprimer, vous pouvez l'invoquer:
$string = '${0}{1}{2}ID.{3}' -f $hashtable,$type,$environment,$method Invoke-Expression -Command $string
Vous avez dupliqué la clé
S_XPI
dans votre exemple de table de hachage, vous voudrez peut-être corriger cela.$ environment = "Test"
est manquantID
. Si vous créez la chaîne avec ces variables, vous obtenez$ Hashtable1AuthTest.BID_XPI
et non$ Hashtable1AuthTestID.BID_XPI