2013-05-29 3 views
0

Я эта странная проблема при работе с powershell. Когда я запускаю цикл while, чтобы проверить, является ли статус инструментов VM, он застревает только внутри. Вот код:Код застрял во время цикла и не вышел из powershell

Connect-VIServer $vmserver -User $vmuser -Password $vmpass 
$status1 = (Get-VM -Name $vmname).Extensiondata.Summary.Guest.ToolsStatus 
Write-Host $status1 

while(!($status1 -eq 'toolsOK')){ 
Write-Host "tool status is:" $status1 
Start-Sleep -Seconds 5 
} 

Write-Host "success" 

Я побежал этот код, когда эта машина была выключена, и в ч/б начал эту машину ($vmname) .WHILE он swtiched от это поняло, что «состояние инструмента:» toolsNotRunning.But даже после включения и получения удаленной машины, он показывает тот же статус, тогда как я проверял состояние ESXI. Я пробовал вышеупомянутую вещь, как будто она может застрять так, чтобы она нажата ENTER, щелчок мышью и т. д., но нет ИСПОЛЬЗОВАНИЯ. Я using powershell ISE-host, version3.0.

ответ

0

Вы только запускаете код обновления один раз. Цикл, пока работает только команда сна и write-host (который никогда не изменится) .. попробуйте это:

Connect-VIServer $vmserver -User $vmuser -Password $vmpass 

do { 
    #This will min. once, until $status is 'toolsOK' 
    $status1 = (Get-VM -Name $vmname).Extensiondata.Summary.Guest.ToolsStatus 

    if($status1 -ne 'toolsOK') { 
     Write-Host "tool status is:" $status 
     Start-Sleep -Seconds 5 
    } 
} 
until($status1 -eq 'toolsOK') 

Write-Host "success" 

или

Connect-VIServer $vmserver -User $vmuser -Password $vmpass 
$status1 = (Get-VM -Name $vmname).Extensiondata.Summary.Guest.ToolsStatus 

while ($status1 -ne 'toolsOK') { 
    Write-Host "tool status is:" $status 
    Start-Sleep -Seconds 5 

    $status1 = (Get-VM -Name $vmname).Extensiondata.Summary.Guest.ToolsStatus 
} 

Write-Host "success"