Verwendung von Powershell zur Verwaltung von Hyper-v Cluser

12

Ich habe zwei Hosts mit Server 2016 Datacenter

Auf jedem Host habe ich derzeit 2 VMs, die gemeinsam genutzten Speicher verwenden

Ich kann alle Cluster-Aufgaben ausführen, z. B. Live-Migration, Verschieben des Speichers,

Ich habe in Google nach einem Skript gesucht, mit dem alle VMs im Cluster gleichzeitig gespeichert werden können.

Wenn ich das laufen lasse:

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

Die VMs werden jedoch gespeichert. Ich werde zweimal aufgefordert, die Namen der VMs einmal für jeden Host einzugeben.

Mein übergeordnetes Ziel ist es, alle VMs im Cluster von einem PC aus neu konfigurieren zu können. Auch die VMs bewegen sich häufig, sodass sie sich nicht immer auf demselben Host befinden.

Beispiel:

Speichern Sie alle VMs

Verschieben Sie das Off-OS des freigegebenen Speichers:

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

Starten Sie die VMs

Wenn ich mich bei jedem Host einzeln anmelde, funktioniert der Befehl einwandfrei. In meiner Produktion habe ich jedoch 7 Hosts mit ca. 100 VMs.

Anthony Fornito
quelle

Antworten:

8

Wenn Sie den gesamten Cluster von PowerShell aus ansprechen möchten, ist das PowerShell-Modul in System Center Virtual Machine Manager wahrscheinlich die beste Lösung. Es wurde dafür gebaut.

Das von Ihnen verwendete PowerShell-Modul war für die Skripterstellung auf einem Host vorgesehen. Es kann immer noch zum Arbeiten gebracht werden. Sie können Ihren Code oben umstrukturieren. Als Beispiel:

$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames
$AllVMsInCluster | Save-VM -Confirm:$false
Jake Oshins
quelle
Jake, kannst du mir erklären, wie das '$ AllVMsInCluster | Save-VM -Confirm: $ false 'durchläuft jede VM in einer Schleife. Ich versuche, den zweiten Teil meiner Aufgabe zu erledigen, den' $ AllVMsInCluster | Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ ', aber ich kann nicht herausfinden, wie das Verzeichnis am Ende festgelegt wird, dh. "C: \ ClusterStorage \ Volume1 \ VM1", "C: \ ClusterStorage \ Volume1 \ VM2"
Anthony Fornito
Sie müssen ein Buch über PowerShell lesen. Das Grundkonzept ist die "Pipeline", durch die Objekte fließen. Ein "Cmdlet" wirkt sich auf jedes der Objekte aus, die in der Pipeline an das Cmdlet übergeben werden. Wenn Sie das Verhalten im Verlauf der Dinge variieren möchten, möchten Sie wahrscheinlich ein Konstrukt wie $ AllVMsInCluster | Für jedes Objekt {Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ $ _. Name}
Jake Oshins