PowerCLI: работа с виртуальными машинами на нескольких серверах vCenter
У меня есть скрипт, который отключит питание и навсегда удалит все виртуальные машины, которые соответствуют определенному префиксу. Я использую это при тестировании других средств автоматизации, чтобы упростить перезагрузку лаборатории. Сценарий подключается к нескольким предварительно определенным серверам vCenter, а затем получает список всех виртуальных машин. У меня проблема в том, что когда я пытаюсь выключить или удалить виртуальные машины, появляется сообщение "Не удалось найти VirtualMachine с именем" VMNAME "".
Код, который подключается к серверам vCenter:
$vcservers = @("VC1","VC2")
Connect-VIServer $vcservers
Код, который получает список виртуальных машин с обоих серверов vCenter:
$prefix = "TEST"
ForEach ($vc in $vcservers) {
$vms += Get-VM -Server $vc | where {$_.Name -like "$prefix*"}
}
Код, который выключает и удаляет каждую ВМ:
ForEach ($vm in $vms) {
$vmname = $vm.name
if ($vm.PowerState -eq "PoweredOn") {
Stop-VM -VM $vmname -confirm:$false
Remove-VM -VM $vmname -DeletePermanently -confirm:$false
}
}
Я установил свойство "Несколько" в области "Пользователи" и "AllUsers" с помощью Set-PowerCLIConfiguration, поэтому он должен выполнять поиск на всех серверах vCenter, но по какой-то причине он не работает.
РЕДАКТИРОВАНИЕ 1/25/17 Обновлен код, чтобы сделать переменную $vcservers согласованной.
1 ответ
Поскольку первая проблема (связанная с именованием переменных) была решена, в настоящее время я подозреваю, что проблема связана с тем, что PowerCLI не уверен, на каком VCenter виртуальные машины вы хотите удалить в режиме реального времени. Таким образом, вы можете использовать VCenter по vCenter вместо того, чтобы пытаться запустить все vCenters одновременно:
$prefix = "TEST"
$vcservers = @("VC1","VC2")
ForEach ($vc in $vcservers) {
Connect-VIServer $vc
$vms += Get-VM -Server $vc | where {$_.Name -like "$prefix*"}
ForEach ($vm in $vms) {
$vmname = $vm.name
if ($vm.PowerState -eq "PoweredOn") {
Stop-VM -VM $vmname -confirm:$false
Remove-VM -VM $vmname -DeletePermanently -confirm:$false
}
Disconnect-VIServer $vc
}