Как остановить неотзывчивую виртуальную машину Hyper-V

Нередко, но иногда виртуальные машины Hyper-V (VM) зависают при попытке их выключения. В результате в Hyper-V Manager появляется VM со статусом «Выключение», которая перестает отвечать, и невозможно принудительно завершить ее с помощью обычных контролов. Даже команда PowerShell Stop-VM -Force не помогает.

В этой ситуации вам потребуется немного креативности для выключения VM. Один из способов – выключить сервер (или компьютер, если вы используете клиентский Hyper-V). Но это довольно грубое решение. Самое важное, если вы хотите принудительно выключить нереагирующую VM, – это GUID VM. Используя GUID, вы можете найти и завершить процесс CPU VM.

Принудительное выключение виртуальной машины Hyper-V путем завершения ее процесса

Использовать описанный ниже метод рекомендуется только в случае, если VM не реагирует на команду выключения из Hyper-V Manager или при использовании команды PowerShell Stop-VM -Force. Нижеперечисленные команды необходимо выполнять в Windows PowerShell от имени локального администратора. Данный метод требует использования Windows PowerShell. Он не работает в PowerShell 6 и более поздних версиях.

В PowerShell с повышенными привилегиями начните с использования команды Get-VM для поиска GUID VM. Вам понадобится знать имя нереагирующей 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

Как только у вас есть название ВМ, выполните следующую команду, заменив “Windows 11” на название ВМ, которую вы хотите остановить:

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

Следующим шагом является использование Get-WMIObject для поиска идентификатора процесса ВМ. Здесь мы используем пространство имен Win32_Process Управление Windows Инструментирование (WMI), чтобы найти запущенный процесс ЦП, который соответствует vmwp.exe и GUID ($VmGUID) нашей виртуальной машины.

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

После того, как мы получим идентификатор процесса ($VMWMProc), мы можем использовать cmdlet Stop-Process для его завершения:

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

Принудительное выключение всех ВМ

Другой способ принудить нереагирующую ВМ выключиться – остановить службу Hyper-V. Однако этот метод принудительно выключит все работающие ВМ на вашем сервере. Как и в предыдущем методе, вам необходимо выполнить следующую команду в повышенном окне PowerShell, т. е. в окне с локальными правами администратора.

Get-Service vmms | Restart-Service

Перезапуск службы Hyper-V (vmms) может занять довольно много времени. Поэтому не волнуйтесь, если на остановку и повторный запуск уйдет несколько минут.

Связанные статьи:

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