Пытаюсь с удаленной машины выключить несколько (не все) виртуальных машин на двух кластерах Hyper-V, по определенному событию, и потом их же включить по другому событию. Событие - это статус ИБП.
Скрипт выключения следующий:
$cluster01 = New-PSSession -ComputerName "hv-02"
Invoke-Command -Session $cluster01 -ScriptBlock {
Get-ClusterGroup -Name VM-01 | Stop-VM
Get-ClusterGroup -Name VM-02 | Stop-VM
}
$cluster02 = New-PSSession -ComputerName "hv-06"
Invoke-Command -Session $cluster02 -ScriptBlock {
Get-ClusterGroup -Name VM-03 | Stop-VM
Get-ClusterGroup -Name VM-04 | Stop-VM
}
Однако, если ВМ находится не на той ноде (в примере hv-02 и hv-06), к которой подключаюсь, то скрипт не выполняется, т.к. он не находит ВМ. Выключаются только те машины, которые находятся на подключаемых нодах.
Можно конечно по очереди подключаться ко всем нодам и выключать нужные машины, но это не совсем правильно, к тому же добавляет прилично времени к полному выключению всех нужных машин, т.к. все командлеты выполняются по очереди, до полного окончания (выключения ВМ).
Если использовать командлет
Stop-ClusterGroup -Name VM-01, то машины уходят в состояние паузы (Suspend).