并不经常发生,但有时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的列表。
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
一旦您获得了 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
强制关闭所有 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/