2016-02-18 6 views
0

У меня есть скрипт, который может вызывать vms на основе имен, введенных в массив.Powershell Shutdown VM Script

Эта часть работает нормально, но следующая часть после инициализации выключения должна ждать определенного периода и уведомлять, сколько vms ожидает ожидания, прежде чем перейдет к другой фазе выключения других vms.

Я не получаю никаких vms, подсчитанных из массива. Вот код для конкретной фазы:

$waittime = 5 #Seconds 

#Create Phase 1 Array 
[Array] $PHASE1 = "TestSvr2008" 

# For each of the VMs on the Hyperv hosts that are powered on 
Foreach ($VM in ($PHASE1 | %{ Get-VM | Where { $_.State -eq "Running" }})){ 
    # Shutdown the guest cleanly 
    $VM | Stop-VM -Confirm:$false } 

    # Set the amount of time to wait before assuming the remaining powered on guests are stuck 
$waittime = 120 #Seconds 

$Time = (Get-Date).TimeofDay 
do { 
    # Wait for the VMs to be Shutdown cleanly 
    sleep 1.0 
    $timeleft = $waittime - ($Newtime.seconds) 
    $numvms = ($PHASE1 | %{ Get-VM | Where { $_.$VM -eq $PHASE1 }}).Count 
    Write "Waiting for shutdown of $numvms VMs or until $timeleft seconds" 
    $Newtime = (Get-Date).TimeofDay - $Time 
    } until ((@($PHASE1 | %{ Get-VM | Where { $_.$VM -eq $PHASE1 }}).Count) -eq 0 -or ($Newtime).Seconds -ge $waittime) 

Благодаря

ответ

0

Эта линия в do и until блоков имеет проблемы:

$numvms = ($PHASE1 | %{ Get-VM | Where { $_.$VM -eq $PHASE1 }}).Count 
  • $_.$VM является опечатка, должно быть $_.VM
  • $_.VM -eq $PHASE1 пытается проверить, совпадает ли имя виртуальной машины с массивом. Сравнения не работают.
  • ForeEach-Object ненужно

Get-Vm принимает массив имен VM по трубопроводу или непосредственно в качестве параметра Name. Таким образом, вы можете сделать это:

$numvms = ($PHASE1 | Get-VM).Count 

или

$numvms = (Get-VM -Name $PHASE1).Count 
+0

Спасибо! Ill дать ему пойти – thedudeabides

+0

Хорошо, новая проблема, если у меня более одного vm, а имя vm отсутствует в массиве, vm все равно закрывается, любые идеи? – thedudeabides