【问题标题】:Code stuck in while loop and not exiting in powershell代码卡在while循环中并且没有在powershell中退出
【发布时间】:2013-05-29 14:30:43
【问题描述】:

我在使用 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,版本3.0..

【问题讨论】:

    标签: powershell powershell-3.0 powershell-ise


    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多