У меня 2 хоста с сервером 2016 Datacenter
На каждом хосте у меня есть 2 виртуальных машины Dev, использующих общее хранилище
Я могу делать все, что связано с кластером, например, мигрировать в реальном времени, перемещать хранилище,
Я искал повсюду в Google скрипт, чтобы сохранить все виртуальные машины в кластере одновременно.
Если я запустил это:
$clusterNodes = Get-ClusterNode;
$Name = ForEach($item in $clusterNodes){Get-VM -ComputerName $item.Name; }
{save-VM -ComputerName $item.Name; }
Он сохранит виртуальные машины, однако он дважды запросит у меня имена виртуальных машин по одному разу для каждого хоста.
Моя общая цель - иметь возможность перенастроить все виртуальные машины в кластере с одного ПК, также виртуальные машины часто перемещаются, поэтому они не всегда находятся на одном и том же хосте.
Пример:
Сохранить все виртуальные машины
Переместите ОС в общее хранилище:
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
Запустите виртуальную машину
Если я вхожу на каждый хост индивидуально, команда будет работать нормально, однако в моем производстве у меня есть 7 хостов с примерно 100 виртуальными машинами.
Если вы хотите адресовать весь кластер из PowerShell, лучшим решением, вероятно, является модуль PowerShell в System Center Virtual Machine Manager. Он был построен для этого.
Модуль PowerShell, который вы используете, предназначен для написания сценариев с одним хостом. Его еще можно заставить работать. Вы можете реструктурировать свой код выше. Например:
$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames
$AllVMsInCluster | Save-VM -Confirm:$false