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_XPIdans 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_XPIet non$ Hashtable1AuthTestID.BID_XPI