如何停止响应失败的Hyper-V虚拟机

并不经常发生,但有时Hyper-V虚拟机(VM)在尝试关闭时会出现挂起的情况。此时,在Hyper-V Manager中会出现一个状态为“正在关闭”的VM,它不再响应,也无法使用常规控件强制关闭。即使使用PowerShell Stop-VM -Force命令也无济于事。

在这种情况下,您需要更有创意地关闭VM。一种方法是关闭服务器(或者如果您在使用客户端Hyper-V,则是关闭PC)。但这有点杀鸡用牛刀。如果您想强制关闭一个不响应的VM,最重要的是需要知道该VM的GUID。利用GUID,您可以找到VM的CPU进程ID并将其终止。

通过终止进程来强制关闭Hyper-V虚拟机

只有在虚拟机无法响应通过Hyper-V Manager发送的关闭指令或使用PowerShell Stop-VM -Force命令时,才建议使用下面的方法。以下命令必须以本地管理员身份在Windows PowerShell中运行。下面的方法需要使用Windows PowerShell,不适用于PowerShell 6或更新版本。

在提升权限的Windows PowerShell提示符中,首先使用Get-VM查找VM的GUID。为此,您需要知道无响应的VM的名称。如果需要确认VM的名称,只需运行Get-VM查看设备上正在运行的所有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 名称,请运行以下命令,在其中用您想要停止的 VM 名称替换 ‘Windows 11’:

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

下一步是使用 Get-WMIObject 查找 VM 的进程 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 命令杀死它:

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

强制关闭所有 VMs

您可以强制关闭未响应的 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/