我正在尝试打开以前使用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”这一行-还是行不通。
感谢您的投入。
谢谢!
答案 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")