Part A: Validating problem as VM in Critical Status
# Check VM Status in Hyper-V
$vmName='TESTVM.kimconnect.com'
get-vm $vmName
# Sample output
Name State CPUUsage(%) MemoryAssigned(M) Uptime Status
---- ----- ----------- ----------------- ------ ------
TESTVM.kimconnect.com OffCritical 0 0 00:00:00 Cannot connect to virtual machine confi...
# Check storage locations
Get-VM $vmName | fl *Location, Path
# Sample output
CheckpointFileLocation : \\NAS\VMS\TESTVM.kimconnect.com
ConfigurationLocation : \\NAS\VMS\TESTVM.kimconnect.com\config
SnapshotFileLocation : \\NAS\VMS\TESTVM.kimconnect.com
Path : \\NAS\VMS\TESTVM.kimconnect.com\config
Part B: Refresh Hyper-V Virtual Machine Management Service
# Restart Virtual Machine Management Service from VMM Server
$vmName='TESTVM.kimconnect.com'
$vmInfo=Get-SCVirtualMachine -Name $vmName
#$badVmConfig=$vmInfo|?{$_.Status -eq 'IncompleteVMConfig'}
$currentHosts=$vmInfo.VMHost.FullyQualifiedDomainName
function restartService($serviceName){
$waitSeconds=40
$isValidProcess=try{[bool](get-service $serviceName -EA Stop)}catch{$false}
if($isValidProcess){
try{
$process=Start-Process -FilePath powershell.exe -ArgumentList "-Command Restart-Service $serviceName" -PassThru -NoNewWindow
$process|Wait-Process -Timeout $waitSeconds -ErrorAction Stop
return $true
}catch{
write-warning $_
$process|Stop-Process -Force
$processId=(get-process $serviceName).Id
if($processId){
write-host "Program now forcefully kills PID $processId of process $serviceName"
$null=$processId|%{taskkill /f /pid $_} # works more reliably than Stop-Process $processName -Force
Start-Service $serviceName -ErrorAction Ignore
$started=$(try{get-service $serviceName}catch{$false})
if($started){
write-host "'serviceName' status is now $($started.Status)"
return $true
}else{
write-warning "'serviceName' status is $($started.Status)"
return $false
}
}else{
write-warning "Service '$serviceName' PID not found."
return $false
}
}
}
}
$currentHosts|%{invoke-command -computername $_ {param($restartService,$serviceName);write-host "$env:computername";[scriptblock]::create($restartService).invoke($serviceName)}} -Args ${function:restartService},'vmms'
Part C: Guest VM shows as online
# Checking VM while login to Hyper-V Host
PS C:\Windows\system32> get-vm $vmName
get-vm : Hyper-V was unable to find a virtual machine with name "TESTVM.kimconnect.com".
At line:1 char:1
+ get-vm $vmName
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (TESTVM.kimconnect.com:String) [Get-VM], VirtualizationException
+ FullyQualifiedErrorId : InvalidParameter,Microsoft.HyperV.PowerShell.Commands.GetVM
# Checking VM while login to VMM
PS C:\Windows\system32> (Get-SCVirtualMachine -Name $vmName).VMHost.FullyQualifiedDomainName
HYPERV01
HYPERV07 (bad record)
# Find bad VM config on VMM Server
$vmName='TESTVM.kimconnect.com'
$vmInfo=Get-SCVirtualMachine -Name $vmName
$badVmConfig=$vmInfo|?{$_.Status -eq 'IncompleteVMConfig'}
$badVmConfig|write-host
# Example of failed repair
Repair-SCVirtualMachine : This action is not valid because virtual machine TESTVM.kimconnect.com is in state
Incomplete VM Configuration. The repair action can only be used on a virtual machine in a failed state. (Error ID: 693)
At line:1 char:1
+ Repair-SCVirtualMachine -VM $badRecord -Retry
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ReadError: (:) [Repair-SCVirtualMachine], CarmineException
+ FullyQualifiedErrorId : 693,Microsoft.SystemCenter.VirtualMachineManager.Cmdlets.RepairVmCmdlet
PS C:\Windows\system32> refresh-vm $badRecord
refresh-vm : An internal error has occurred trying to contact the 'HYPERV01' server: NO_PARAM: NO_PARAM.
WinRM: URL: [http://HYPERV01:5985], Verb: [ENUMERATE], Resource:
[http://schemas.microsoft.com/wbem/wsman/1/wmi/root/microsoft/windows/storage/MSFT_Volume], Filter: []
(Error ID: 2912, Detailed Error: The requested resource is in use (0x800700AA))
Check that WS-Management service is installed and running on server 'HYPERV01'. For more information
use the command "winrm helpmsg hresult". If 'HYPERV01' is a host/library/update server or a PXE server
role then ensure that VMM agent is installed and running. Refer to https://learn.microsoft.com/en-us/troubleshoot/system-center/vmm/troubleshoot-issues-adding-hyper-v-host for more
details.
To restart the job, run the following command:
PS> Restart-Job -Job (Get-VMMServer localhost | Get-Job | where { $_.ID -eq "{26ce1506-da92-42a7-a400-705fe1008188}"})
At line:1 char:1
+ refresh-vm $badRecord
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ReadError: (:) [Read-SCVirtualMachine], CarmineException
+ FullyQualifiedErrorId : 2912,Microsoft.SystemCenter.VirtualMachineManager.Cmdlets.RefreshVmCmdlet
Categories: