Jak używać programu PowerShell do administrowania Cluser Hyper-v

12

Mam 2 hosty, oba z Centrum danych 2016 Server

Na każdym hoście mam obecnie 2 maszyny wirtualne, które używają pamięci współdzielonej

Mogę wykonywać wszystkie czynności związane z klastrem, tj. Migrować na żywo, przenosić pamięć,

Szukałem w całym Google skryptu, aby móc zapisać wszystkie maszyny wirtualne w klastrze w tym samym czasie.

Jeśli uruchomię to:

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

Uratuje to VM jednak dwukrotnie poprosi mnie o nazwy maszyn wirtualnych dla każdego hosta.

Moim nadrzędnym celem jest możliwość rekonfiguracji wszystkich maszyn wirtualnych w klastrze z jednego komputera, a także wielu maszyn wirtualnych, więc nie zawsze są one na tym samym hoście.

Przykład:

Zapisz wszystkie vm

Przenieś poza pamięć współdzieloną:

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

Uruchom maszyny wirtualne

Jeśli zaloguję się do każdego hosta osobno, polecenie będzie działać poprawnie, jednak w mojej produkcji mam 7 hostów z około 100 maszynami wirtualnymi.

Anthony Fornito
źródło

Odpowiedzi:

8

Jeśli chcesz adresować cały klaster z PowerShell, najlepszym rozwiązaniem jest prawdopodobnie moduł PowerShell w System Center Virtual Machine Manager. Został zbudowany do tego.

Używany moduł PowerShell był przeznaczony do skryptowania na jednym hoście. Nadal można go uruchomić. Możesz zrestrukturyzować swój kod powyżej. Jako przykład:

$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames
$AllVMsInCluster | Save-VM -Confirm:$false
Jake Oshins
źródło
Jake, możesz mi wyjaśnić, jak „$ AllVMsInCluster | Save-VM -Confirm: $ false ”zapętla się przez każdą maszynę wirtualną, próbuję wykonać drugą część mojego zadania,„ $ AllVMsInCluster | Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ ', ale nie mogę wymyślić, jak ustawić katalog na końcu, tj. „C: \ ClusterStorage \ Volume1 \ VM1”, „C: \ ClusterStorage \ Volume1 \ VM2”
Anthony Fornito
Musisz przeczytać książkę w PowerShell. Podstawową koncepcją jest „rurociąg”, przez który przepływają obiekty. „Cmdlet” działa na każdy obiekt, który przechodzi do niego w potoku. Jeśli chcesz zmieniać zachowanie w miarę upływu czasu, prawdopodobnie potrzebujesz konstrukcji takiej jak: $ AllVMsInCluster | Foreach-Object {Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ $ _. Name}
Jake Oshins