虚拟机电源状态未更新并正确返回

时间:2020-08-07 19:14:12

标签: powercli

我正在尝试打开以前使用PowerCLI关闭的VM。
当我尝试运行以下脚本(较大的脚本的一部分)时,即使在VSphere控制台上看到机器已开机,我仍然得到的状态不是“ PoweredOn”。
我在其他情况下也遇到了这个问题,尝试重新获得虚拟机,但是我无法完成这项工作。
如果不重新获取虚拟机,有时会出错,声称我要引用的虚拟机为空。 我究竟做错了什么?我想念什么?
以下是脚本行:

$VMs = get-vm | Where-object {($_.Name -like $vmNamePatternToSearch)}# | Out-Null
foreach ($vm in $VMs) {
    #$vm = Get-VM -Name $vm.Name #| Out-Null
    if ($vm.powerstate -ieq "poweredoff") {
        Start-VM -VM $vm -Confirm:$False | Out-Null
        Write-Host -NoNewline 'Powering On' $vm.Name.ToString().PadRight(22)
        do {
            Start-Sleep -Seconds 1
            Write-Host -NoNewline '|' $vm.powerstate
        } until ($vm.powerstate -ieq "PoweredOn")
        Write-Host
    }
}

所以我的输出是“ | PoweredOff | PoweredOff | PoweredOff | PoweredOff | PoweredOff | ...”
即使机器已经启动。
即使我取消注释“#$ vm = Get-VM -Name $ vm.Name#| Out-Null”这一行-还是行不通。

感谢您的投入。

谢谢!

1 个答案:

答案 0 :(得分:0)

PowerShell的对象是时间点引用。因此,您的vm变量将在运行get-vm cmdlet时继续反映VM的状态。

为帮助解决此问题,您可以运行类似于以下内容的内容,以在循环期间引用VM的更新状态:

        do {
            Start-Sleep -Seconds 1
            Write-Host -NoNewline '|' $vm.powerstate
        } until ((Get-VM $vm).powerstate -ieq "PoweredOn")
相关问题