1

我在使用 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。但即使在打开并获取机器的遥控器后它显示相同的状态,而我检查了 ESXI 状态正在运行。我尝试了上面提到的事情,比如它可能会卡住,所以按下 ENTER、鼠标单击等,但没有使用 ..我正在使用 powershell ISE-host,version3.0 ..

4

1 回答 1

1

您只运行一次更新代码。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"
于 2013-05-29T14:36:56.687 回答