PowerShell/CLI: “Foreach” en boucle avec plusieurs tableaux
J'ai un script PowerCLI qui éteint une machine virtuelle, les changements de sa mémoire et de cpu, et puis les pouvoirs sur le dos. J'ai adapté le script à utiliser des variables. Tout cela fonctionne parfaitement.
Je vais maintenant essayer de modifier le script à utiliser des tableaux, afin de cycle à travers de nombreuses machines virtuelles. Le script parties qui s'éteint et s'allume le VMs fonctionne parfaitement.
La peine que je vais avoir, c'est à l'aide de variables à partir de deux tableaux dans une boucle foreach.
Pour chaque VM dans $vm_name, j'ai besoin de régler le montant correspondant de la mémoire trouvés dans $memory_gb.
C'est ce que j'ai (actuellement il définit la même quantité de mémoire ("1") pour toutes les machines virtuelles)....
$vm_name = @("OMAC-SBXWIN7AJM", "OMAC-SBXWIN2012R2AJM", "OMAC-SBXWIN2008R2AJM")
$memory_gb = 2,4,4
# SET THE VM MEMORY
Write-Host 'NOW SETTING THE VM MEMORY'
foreach ($objItem in $vm_name)
{Set-VM -VM $vm_name -MemoryGB 1 -confirm:$false
Break
}
http://i.stack.imgur.com/E9hfY.png
...J'ai essayé de nidification d'une deuxième boucle foreach à l'intérieur de la première, en vain.
Comment écrire le script de sorte que chaque machine virtuelle dans $vm_name, reçoit le montant correspondant de la mémoire trouvés dans $memory_gb?
OriginalL'auteur James McCallister | 2014-08-07
Vous devez vous connecter pour publier un commentaire.
Vous avez 2 options. Première (et pas ce que je dirais) est une boucle For (). Ce serait quelque chose comme ceci:
La meilleure façon serait de le mettre dans un fichier CSV avec des en-têtes comme
VMName, Memory
et puis la liste de chaque machine virtuelle et la mémoire que vous souhaitez. Ensuite exécuter quelque chose comme:Cela a fonctionné parfaitement. Merci!!!! Je vais certainement être à l'aide d'un .CSV, en tant que Malade, éventuellement, à modifier de nombreuses machines.
Cela a fonctionné, mais j'ai eu cette erreur.... Set-VM : Impossible de lier le paramètre 'MemoryGB' à la cible. Exception paramètre "MemoryGB": "la référence d'Objet n'est pas définie à une instance d'un objet." Au U:\How Pour\PowerCLI\Test.ps1:8 char:36 + VM-VM $vm_name[$i] -MemoryGB $memory_gb[$i] -confirmer:$false + ~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (:) [Set-VM], ParameterBindingExcept ion + FullyQualifiedErrorId : ParameterBindingFailed,VMware.VimAutomation.ViCo re.Les applets de commande.Commandes.SetVM Depuis, il a travaillé, le message d'erreur a vraiment de l'importance?
C'est probablement parce que j'ai utilisé -le au lieu de lt, de sorte qu'il était en train d'effectuer une itération sur un 4e VM/mémoire. J'ai vraiment devrait vous d'utiliser la deuxième option, donc je n'ai pas payé comme il est proche de l'attention que je devrais avoir sur la première. Je vais mettre à jour la réponse peu de temps pour remédier à cela.
OriginalL'auteur TheMadTechnician
Vous pouvez utiliser Zip fonction:
Utilisation:
Résultat:
OriginalL'auteur mtman
Vous avez juste besoin d'assurer à la fois les tableaux sont de la même longueur.
Je suis flatté, mais sur tant de grâce est généralement exprimée en upvotes et/ou en acceptant la meilleure réponse 🙂
OriginalL'auteur JensG
Un autre, plus compact, la solution est d'utiliser une table de hachage:
OriginalL'auteur Raf
Cela fonctionnera aussi longtemps que les deux tableaux sont de la même taille.
OriginalL'auteur thepi