応答しないHyper-V仮想マシンを停止する方法

それほど頻繁には起こりませんが、Hyper-V 仮想マシン(VM)がシャットダウンしようとするとフリーズすることがあります。そして、Hyper-V マネージャでステータスが「シャットダウン中」と表示され、応答しなくなり、通常のコントロールを使用してシャットダウンを強制することができません。PowerShellのStop-VM -Forceコマンドでも解決しません。

この状況では、VMのシャットダウンに対してより創造的になる必要があります。1つの方法は、サーバーをシャットダウンする(またはクライアントHyper-Vを使用している場合はPCをシャットダウンする)ことです。しかし、これはかなり力技的な解決策です。応答しないVMを強制的にシャットダウンする場合、重要なのはVMのGUIDです。GUIDを使用すると、VMのCPUプロセスIDを見つけて終了させることができます。

プロセスを終了させてHyper-V 仮想マシンを強制終了する

以下の方法は、Hyper-V マネージャからのシャットダウンコマンドやPowerShellのStop-VM -Forceコマンドへの応答がない場合にのみ推奨されます。以下のコマンドは、ローカル管理者として Windows PowerShell で実行する必要があります。以下の方法には、Windows PowerShellが必要です。PowerShell 6以降では機能しません。

昇格された Windows PowerShell プロンプトで、Get-VMを使用してVMの GUID を見つけます。これを行うには、応答しないVMの名前を知っている必要があります。VMの名前を確認する必要がある場合は、単にデバイスで実行中のすべてのVMのリストを表示するには、Get-VMを実行してください。

ADがダウンしていると、時間が重要です

A recent survey revealed 94% of organizations can’t recover their Active Directory (AD) forest in minutes. Cayosoft offers the only instant AD forest recovery.

Learn More

Get-VM

VM名を取得したら、以下のコマンドを実行し、’Windows 11’を停止したいVMの名前に置き換えます:

$VmGUID = (Get-VM 'Windows 11').id

次に、Get-WMIObjectを使用してVMのプロセスIDを見つけます。ここでは、実行中のCPUプロセスを見つけるために、Win32_Process Windows Management Instrumentation (WMI) ネームスペースを使用して、vmwp.exeと仮想マシンのGUID($VmGUID)に一致するプロセスを見つけます。

$VMWMProc = (Get-WMIObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VmGUID})

プロセスID ($VMWMProc)を取得したら、Stop-Processコマンドレットを使用して停止できます:

Stop-Process ($VMWMProc.ProcessId) –Force
How to Stop an Unresponsive Hyper-V Virtual Machine (Image Credit: Russell Smith)

すべてのVMを強制的にシャットダウンします

応答しないVMを強制的にシャットダウンする別の方法は、Hyper-Vサービスを停止する方法です。ただし、この方法ではサーバー上で実行中のすべてのVMが強制的にシャットダウンされます。前述の方法と同様に、次のコマンドを管理者権限を持つ、つまりローカル管理者権限を持つ PowerShellウィンドウで実行する必要があります。

Get-Service vmms | Restart-Service

Hyper-Vサービス(vmms)の再起動にはかなりの時間がかかる場合があります。再起動に数分かかり、再起動してからもう一度実行されるのに数分かかっても心配しないでください。

関連記事

Source:
https://petri.com/how-to-stop-an-unresponsive-hyper-v-virtual-machine/