Come utilizzare PowerShell per amministrare Hyper-v Cluser


12

Ho 2 host entrambi con Server 2016 Datacenter

Su ogni host ho attualmente 2 sviluppatori di macchine virtuali che utilizzano l'archiviazione condivisa

Posso fare tutte le cose del cluster, ad es., Migrare in tempo reale, spostare l'archiviazione,

Ho cercato su Google dappertutto uno script per poter salvare contemporaneamente tutte le VM nel cluster.

Se corro questo:

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

Salverà i VM ma mi chiederà due volte i nomi dei VM una volta per ciascun host.

Il mio obiettivo generale è quello di essere in grado di riconfigurare tutte le VM nel cluster da un PC, anche i VM si muovono molto in modo che non siano sempre sullo stesso host.

Esempio:

Salva tutte le vm

Sposta il sistema di archiviazione condiviso:

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

Avviare le macchine virtuali

Se accedo a ciascun host individualmente il comando verrà eseguito correttamente, tuttavia nella mia produzione ho 7 host con circa 100 VM.

Risposte:


8

Se si desidera indirizzare l'intero cluster da PowerShell, la soluzione migliore è probabilmente il modulo PowerShell in System Center Virtual Machine Manager. È stato costruito per questo.

Il modulo PowerShell che stai utilizzando era destinato allo scripting per host singolo. Può ancora essere fatto funzionare. Puoi ristrutturare il tuo codice sopra. Come esempio:

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

Jake, puoi spiegarmi come '$ AllVMsInCluster | Save-VM -Confirm: $ false 'sta eseguendo il ciclo attraverso ogni VM, sto cercando di completare la seconda parte del mio compito,' $ AllVMsInCluster | Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ 'ma non riesco a capire come impostare la directory alla fine, vale a dire. 'C: \ ClusterStorage \ Volume1 \ VM1', 'C: \ ClusterStorage \ Volume1 \ VM2'
Anthony Fornito,

Devi leggere un libro su PowerShell. Il concetto fondamentale è la "pipeline" e gli oggetti vi scorrono. Un "cmdlet" agisce su ciascuno degli oggetti che gli passano sulla pipeline. Se vuoi variare il comportamento mentre le cose passano, probabilmente vuoi un costrutto come: $ AllVMsInCluster | Foreach-Object {Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ $ _. Name}
Jake Oshins
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.