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
}
Другие вопросы по тегам