VM 电源状态未更新并正确返回

VM power state not updated and returned correctly

我正在尝试启动之前使用 PowerCLI 关闭的 VM。
当我尝试 运行 以下脚本(更大脚本的一部分)时,我仍然得到一个不是“PoweredOn”的状态,即使我可以在 VSphere 控制台上看到机器已开机。
我在其他情况下也遇到过这个问题,我尝试重新获取虚拟机,但我没能成功。
如果我不重新获取虚拟机,我有时会收到错误消息,声称我所指的虚拟机为空。 我究竟做错了什么?我错过了什么?
以下是脚本行:

$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”行 - 仍然不行。

非常感谢您的意见。

谢谢!

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

为了帮助克服这个问题,您可以 运行 像下面这样的东西在循环期间引用 VM 的更新状态:

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