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")
我正在尝试启动之前使用 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")