代码卡在while循环中而不是在PowerShell中退出

时间:2013-05-29 14:30:44

标签: powershell powershell-v3.0 powershell-ise

使用powershell时,我遇到了这个奇怪的问题。当我运行while循环来检查VM工具是否处于状态时,它只会卡在内部。这是代码:

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)时,我运行了这段代码。当它被关闭时,它被理解为“工具状态为:”toolsNotRunning.But即使在开机后也是如此然后我检查ESXI状态正在运行。我尝试了上面提到的事情,因为它可能会卡住所以按下ENTER,鼠标点击等,但没有USE ..我正在使用powershell ISE-主机,3.0版..

1 个答案:

答案 0 :(得分:0)

您只运行一次更新代码。 while循环只运行sleep命令和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"