Как использовать powershell для администрирования Hyper-v Cluser

12

У меня есть 2 хоста как с сервером 2016 Datacenter

На каждом хосте у меня есть 2 виртуальных машины в настоящее время Dev, используя общее хранилище

Я могу делать все кластерные вещи, т. Е. Live мигрировать, перемещать хранилище,

Я искал во всем 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 виртуальными машинами.

Энтони Форнито
источник

Ответы:

8

Если вы хотите обратиться ко всему кластеру из PowerShell, лучшим решением, вероятно, является модуль PowerShell в System Center Virtual Machine Manager. Он был построен для этого.

Модуль PowerShell, который вы используете, был предназначен для сценариев с одним хостом. Это все еще можно заставить работать. Вы можете реструктурировать свой код выше. В качестве примера:

$clusterNodeNames = (Get-ClusterNode -Cluster ClusterName).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames
$AllVMsInCluster | Save-VM -Confirm:$false
Джейк Ошинс
источник
Джейк, можешь мне объяснить, как '$ AllVMsInCluster | Save-VM -Confirm: $ false 'проходит по каждой виртуальной машине, я пытаюсь выполнить вторую часть своей задачи, $ AllVMsInCluster | Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ ', но я не могу понять, как установить каталог в конце, т.е. 'C: \ ClusterStorage \ Volume1 \ VM1', 'C: \ ClusterStorage \ Volume1 \ VM2'
Энтони Форнито
Вам нужно прочитать книгу по PowerShell. Фундаментальная концепция - это «трубопровод», и объекты протекают через него. «Командлет» действует на каждый из объектов, которые передаются ему в конвейере. Если вы хотите изменить поведение при прохождении событий, вам, вероятно, понадобится такая конструкция: $ AllVMsInCluster | Foreach-Object {Set-VM -SnapshotFileLocation C: \ ClusterStorage \ Volume1 \ $ _. Name}
Джейк Ошинс,