Comment créer dynamiquement un tableau et de l'utiliser en Powershell
J'ai besoin pour créer et utiliser des tableaux, mais j'ai besoin de créer de façon dynamique. Je suis le développement de script pour obtenir l'application des pools de mémoire, mais lorsque nous avons plus de 1 processus de travail j'ai besoin de stocker dans la matrice de la mémoire et de calculer ensuite la moyenne.
Je suis en utilisant ce créer
New-Variable -Name "Array_$($AppPoolName)" -Value @()
Mais je ne sais pas comment faire pour ajouter des données au tableau à l'aide d'un nom dynamique, comme je le ferais quand j'utilise un nom fixe ($var += <Value>
).
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire sans les tables de hashage et sans Invoquer l'Expression:
Vous pouvez utiliser Get-Variable:
Avis
-ValueOnly
à la fin. Sinon vous obtiendrez une variablePSObject
. De technet:Set-Variable
, que la syntaxe est plus complexe que de simplement en utilisant un variable. En général, je ne voudrais pas l'utiliser dynamique d'une variable nommée en premier lieu. J'avais plus de chances d'utiliser une table de hachage.Utilisation
Get-Variable
pour récupérer dynamiquement la variable nommée par exemple:Pour être complet, vous pouvez également utiliser Set-Variable mais qui ne gère pas directement la matrice de la concaténation de la syntaxe par exemple:
Oui, c'est un vomitif. Peut-être une meilleure option est d'utiliser une table de hachage:
Vous pouvez stocker la dynamique nom dans une variable, puis utilisez Invoke-Expression à ajouter à la variable, comme suit:
(Notez que vous n'avez pas besoin $() autour de $AppPoolName; vous pouvez interpoler la variable sur son propre.)
Ou, vous pouvez utiliser Invoke-Expression à re-tirer la dynamique de nom et de modifier la variable qui a dérivé nom:
Invoke-Expression
comme il peut être utilisé pour les attaques par injection de script. Alors qu'il est très peu probable dans votre scénario, essayez ceci: mettre des {} autour de dynamicname dans les iex de chaîne par exemple, ${dynamicname} puis définissez $dynamicname à $dynamicName = "Array_Foo;del foo.ps1 -wh;`$var" Maintenant exécuter le iex déclaration. 🙂if ($variable_to_be_used_in_iex -match '[;>|]') {throw "The value you supplied contains a $($matches[0]) character. What are you trying to pull?!"}
(Ajouter tous les autres potentiellement abuseable caractères de la classe)