Não acontece com muita frequência, mas às vezes as máquinas virtuais Hyper-V (VM) travam quando você está tentando desligá-las. E você acaba com uma VM no Gerenciador do Hyper-V com um status de ‘Desligando’ que não responde mais e não pode ser forçada a desligar usando os controles normais. Nem mesmo o comando PowerShell Stop-VM -Force ajuda.
Nessa situação, você precisa ser mais criativo ao desligar a VM. Uma maneira é desligar seu servidor (ou PC se estiver usando o Hyper-V do cliente). Mas essa é uma solução um tanto drástica. A coisa mais importante que você precisa, se deseja forçar o desligamento de uma VM sem resposta, é o GUID da VM. Usando o GUID, você pode encontrar o ID do processo da CPU da VM e encerrá-lo.
Forçar o desligamento de uma máquina virtual Hyper-V matando seu processo
O uso do método abaixo é recomendado apenas se a VM não estiver respondendo a um comando de desligamento do Gerenciador do Hyper-V ou usando o comando PowerShell Stop-VM -Force. Os comandos a seguir devem ser executados no Windows PowerShell como administrador local. O método abaixo requer o Windows PowerShell. Não funciona no PowerShell 6 ou versões posteriores.
Em um prompt do Windows PowerShell elevado, comece usando o Get-VM para encontrar o GUID da VM. Você precisará saber o nome da VM sem resposta para fazer isso. Se precisar confirmar o nome da VM, basta executar Get-VM para ver uma lista de todas as VMs em execução no dispositivo.
Quando o AD está inativo, cada minuto é importante
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
Depois de obter o nome da VM, execute o comando abaixo, substituindo ‘Windows 11’ pelo nome da VM que você deseja parar:
$VmGUID = (Get-VM 'Windows 11').id
O próximo passo é usar Get-WMIObject para encontrar a ID do processo da VM. Aqui, utilizamos o namespace Windows Management Instrumentation (WMI) Win32_Process para localizar um processo de CPU em execução que corresponda a vmwp.exe e ao GUID ($VmGUID) de nossa máquina virtual.
$VMWMProc = (Get-WMIObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VmGUID})
Uma vez que tenhamos a ID do processo ($VMWMProc), podemos usar o cmdlet Stop-Process para encerrá-lo:
Stop-Process ($VMWMProc.ProcessId) –Force
Forçar todas as VMs a desligarem
Outra maneira de forçar uma VM que não está respondendo a desligar é parar o serviço Hyper-V. No entanto, esse método irá desligar à força todas as VMs em execução no seu servidor. Assim como no método anterior, você precisa executar o seguinte comando em uma janela do PowerShell elevada, ou seja, uma que tenha privilégios de administrador local.
Get-Service vmms | Restart-Service
A reinicialização do serviço Hyper-V (vmms) pode demorar um pouco. Portanto, não se preocupe se levar vários minutos para parar e, em seguida, reiniciá-lo.
Artigos relacionados:
Source:
https://petri.com/how-to-stop-an-unresponsive-hyper-v-virtual-machine/