Нередко, но иногда виртуальные машины 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.
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
Принудительное выключение всех ВМ
Другой способ принудить нереагирующую ВМ выключиться – остановить службу Hyper-V. Однако этот метод принудительно выключит все работающие ВМ на вашем сервере. Как и в предыдущем методе, вам необходимо выполнить следующую команду в повышенном окне PowerShell, т. е. в окне с локальными правами администратора.
Get-Service vmms | Restart-Service
Перезапуск службы Hyper-V (vmms) может занять довольно много времени. Поэтому не волнуйтесь, если на остановку и повторный запуск уйдет несколько минут.
Связанные статьи:
Source:
https://petri.com/how-to-stop-an-unresponsive-hyper-v-virtual-machine/