這種情況並不常見,但有時Hyper-V虛擬機器(VM)在嘗試關機時會當機。最終,您將在Hyper-V管理員中看到一個狀態為“正在關機”的VM,它不再響應,無法使用常規控件強制關機。即使使用PowerShell的Stop-VM -Force命令也無法幫助。
在這種情況下,您需要更有創意地關閉VM。一種方法是關閉您的伺服器(或者如果使用客戶端Hyper-V則關閉PC)。但這有點像使用大錘的解決方案。如果要強制關閉無響應的VM,最重要的是需要VM的GUID。使用GUID,您可以找到VM的CPU進程ID並將其終止。
通過終止進程來強制關閉Hyper-V虛擬機器
只有當VM不對來自Hyper-V管理員的關機命令或使用PowerShell Stop-VM -Force命令作出響應時,才建議使用下面的方法。以下命令必須以本機管理員的身份在Windows PowerShell中運行。以下方法需要使用Windows PowerShell。它不適用於PowerShell 6或更新版本。
在提升權限的Windows PowerShell提示符中,首先使用Get-VM查找VM的GUID。您需要知道無響應的VM的名稱。如果需要確認VM的名稱,只需運行Get-VM即可查看設備上運行的所有VM的列表。
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.
Get-VM
一旦您有了虛擬機器名稱,執行以下命令,將「Windows 11」替換為您想停止的虛擬機器的名稱:
$VmGUID = (Get-VM 'Windows 11').id
接下來,使用 Get-WMIObject 找到虛擬機器的進程 ID。我們在這裡使用 Win32_Process Windows 管理 儀器 (WMI) 命名空間來尋找一個符合 vmwp.exe 和虛擬機器的 GUID($VmGUID)的正在運行的 CPU 過程。
$VMWMProc = (Get-WMIObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VmGUID})
一旦我們有了進程 ID($VMWMProc),我們可以使用 Stop-Process cmdlet 來終止它:
Stop-Process ($VMWMProc.ProcessId) –Force
強制所有虛擬機器關機
您可以強制停止未響應的虛擬機器的另一種方法是停止 Hyper-V 服務。但是,這種方法將強制關閉伺服器上運行的所有虛擬機器。與上一種方法一樣,您需要在擁有本地 管理員權限 的 PowerShell 窗口中執行以下命令,即提升權限操作。
Get-Service vmms | Restart-Service
重新啟動 Hyper-V 服務(vmms)可能需要相當長的時間。因此,如果關閉並重新啟動需要幾分鐘,不用擔心。
相關文章:
Source:
https://petri.com/how-to-stop-an-unresponsive-hyper-v-virtual-machine/