With the below script I am trying to perform shutdown vm and apply windows updates and power on it and wait till windows updates are fully applied and then poweroff the machine.
Steps as below:
1.Do guest shutdown for the vm which is $vm variable and wait till powerstate becomes poweredOff.
2. Start back the vm and wait till Guest.GuestOperationsReady becomes True
3. Then finally poweroff the vm using Stop-VMGuest.
Here in step 2 when I start the vm it is applying the windows updates. However the Guest.GuestOperationsReady state shows True so its not waiting for the guest to completely startup in a whileloop. It just moved to step 3 and the windows updates are not applying as expected. Is there any way to wait till we see ctrl+alt+del screen in windows and move to step 3.
foreach($vm in (Get-VM Test01,Test02)){
Write-Host "Stopping VM $($vm.Name) to Apply windows updates"
Stop-VMGuest -VM $vm.Name -Confirm:$false
while($vm.ExtensionData.Runtime.PowerState -ne 'poweredOff'){
Start-Sleep -Seconds 1
$vm.ExtensionData.UpdateViewData("Runtime.Powerstate")
}
Write-Host "Starting back the VM $($vm.Name) after applying updates"
Start-VM -VM $vm.Name -Confirm:$false
$vm.ExtensionData.UpdateViewData("Guest.GuestOperationsReady")
while($vm.ExtensionData.Guest.GuestOperationsReady -ne "True"){
Start-Sleep -Seconds 1
$vm.ExtensionData.UpdateViewData("Guest.GuestOperationsReady")
}
Write-Host "Performing Final Stop operation on VM $($vm.Name)"
Stop-VMGuest -VM $vm.Name -Confirm:$false
$vm.ExtensionData.UpdateViewData("Runtime.PowerState")
while($vm.ExtensionData.Runtime.PowerState -eq 'poweredOn'){
Start-Sleep -Seconds 1
$vm.ExtensionData.UpdateViewData("Runtime.Powerstate")
}
}