Comment utiliser PowerShell pour administrer Hyper-v Cluser


12

J'ai 2 hôtes avec Server 2016 Datacenter

Sur chaque hôte, j'ai actuellement 2 machines virtuelles utilisant le stockage partagé

Je peux faire toutes les choses du cluster, c'est-à-dire migrer en direct, déplacer le stockage,

J'ai cherché partout sur google pour un script pour pouvoir enregistrer tous les vm dans le cluster en même temps.

Si je lance ceci:

$clusterNodes = Get-ClusterNode;
$Name = ForEach($item in $clusterNodes){Get-VM -ComputerName $item.Name; }
{save-VM -ComputerName $item.Name; }

Il sauvera les VM cependant Il m'invitera deux fois pour les noms des VMs une fois pour chaque hôte.

Mon objectif global est de pouvoir reconfigurer toutes les VM du cluster à partir d'un seul PC, et les VM se déplacent beaucoup afin qu'elles ne soient pas toujours sur le même hôte.

Exemple:

Enregistrer tous les VM

Déplacez l'os hors du stockage partagé:

Set-VM pv02 -SnapshotFileLocation C:\ClusterStorage\Volume1\pv02
Set-VM pv02 -SmartPagingFilePath C:\ClusterStorage\Volume1\pv02
Set-VMHardDiskDrive -VMName  pv02 -ControllerType SCSI -Path C:\ClusterStorage\Volume1\pv02\pv02.vhdx

Démarrer les VM

Si je me connecte à chaque hôte individuellement, la commande fonctionnera correctement, mais dans ma production, j'ai 7 hôtes avec environ 100 machines virtuelles.

Réponses:


8

Si vous souhaitez adresser l'intégralité du cluster à partir de PowerShell, la meilleure solution est probablement le module PowerShell dans System Center Virtual Machine Manager. Il a été construit pour cela.

Le module PowerShell que vous utilisez était destiné aux scripts à hôte unique. Il peut encore fonctionner. Vous pouvez restructurer votre code ci-dessus. Par exemple:

$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames
$AllVMsInCluster | Save-VM -Confirm:$false

Jake pouvez-vous m'expliquer comment le '$ AllVMsInCluster | Save-VM -Confirm: $ false 'parcourt chaque machine virtuelle, j'essaie de terminer la deuxième partie de ma tâche, le' $ AllVMsInCluster | Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ 'mais je ne peux pas comprendre comment définir le répertoire à la fin, c'est-à-dire. 'C: \ ClusterStorage \ Volume1 \ VM1', 'C: \ ClusterStorage \ Volume1 \ VM2'
Anthony Fornito

Vous devez lire un livre sur PowerShell. Le concept fondamental est le «pipeline» et les objets le traversent. Une "applet de commande" agit sur chacun des objets qui lui sont transmis sur le pipeline. Si vous souhaitez modifier le comportement au fur et à mesure que les choses passent, vous voulez probablement une construction comme: $ AllVMsInCluster | Foreach-Object {Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ $ _. Name}
Jake Oshins
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.