У меня есть сценарий, который отключит питание и удалит все виртуальные машины, соответствующие определенному префиксу. Я использую это при тестировании других инструментов автоматизации, чтобы упростить сброс лаборатории. Скрипт подключается к нескольким предварительно заданным серверам vCenter, а затем получает список всех виртуальных машин. Проблема в том, что когда я пытаюсь отключить или удалить виртуальные машины, в нем говорится: «Не удалось найти VirtualMachine с именем« VMNAME »».PowerCLI: работа с виртуальными машинами на нескольких серверах vCenter
код, который подключается к 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-PowerCLIConfigu ration, поэтому он должен искать все серверы vCenter, но по какой-то причине он не работает.
EDIT 1/25/17 Обновлен код, чтобы переменная $ vcservers была последовательной.
Что содержит '$ vms'? Я предполагаю, что это массив массивов, в то время как вы ожидаете массив виртуальных машин. – Swonkie
Он содержит список виртуальных машин, который соответствует поиску из второго блока кода. Это массив, содержащий имя, powerstate и другие свойства. – McKenning