param( [Parameter(Mandatory)] [string]$VMName ) $timeout = 60 $state = (Get-VM -Name $vmName).State if ($state -ne "Running") { Start-VM -Name $vmName | Out-Null Write-Host "Starting VM '$vmName'..." do { Start-Sleep -Seconds 2 $timeout = $timeout - 2 $state = (Get-VM -Name $vmName).State $ret = Write-Host " Current state: $state" } while (($state -ne 'Running') -and ($timeout -gt 0)) if ($state -eq 'running') { Write-Host "VM '$vmName' is now Running" } else { Write-Host "Error: the timeout has expired." } } else { Write-Host "VM '$vmName' is already Running" } $timeout = 60 $state = "Checking the guest's status" $osname = "" Write-Host "Waiting Guest OS startup '$vmName'..." do { Start-Sleep -Seconds 2 $timeout = $timeout - 2 #if ((get-vmintegrationService -VMname $vmname)[0].PrimaryOperationalStatus -eq "Ok") { # $state = "Running" #} $items = .\get-kvpdata.ps1 -VMname $vmName if ($items) { foreach ($item in $items) { if ($item.Name -eq "OSName" ) { $osname = $item.Data if ($osname -ne "") { $state = "Running" } } } } Write-Host " Current state: $state" } while (($state -ne 'Running') -and ($timeout -gt 0)) if ($state -eq 'running') { Write-Host "VM '$vmName' Guest OS '$osname' is Running" } else { Write-Host "Error: the timeout has expired." }