Non succede spesso, ma a volte le macchine virtuali Hyper-V (VM) si bloccano durante il tentativo di spegnerle. E ti ritrovi con una VM nel Gestore Hyper-V con uno stato di ‘Spegnimento’ che non risponde più e non può essere forzato a spegnersi utilizzando i controlli normali. Nemmeno il comando Stop-VM -Force di PowerShell aiuta.
In questa situazione, devi essere più creativo per spegnere la VM. Un modo è spegnere il server (o il PC se stai utilizzando Hyper-V client). Ma questa è una soluzione piuttosto drastica. La cosa più importante di cui hai bisogno se vuoi forzare lo spegnimento di una VM non responsiva, è il GUID della VM. Utilizzando il GUID, puoi trovare l’ID di processo CPU della VM e terminarlo.
Forzare lo spegnimento di una macchina virtuale Hyper-V uccidendo il suo processo
Utilizzare il metodo seguente è consigliato solo se la VM non risponde a un comando di spegnimento dal Gestore Hyper-V o utilizzando il comando Stop-VM -Force di PowerShell. I comandi seguenti devono essere eseguiti in Windows PowerShell come amministratore locale. Il metodo seguente richiede Windows PowerShell. Non funziona in PowerShell 6 o versioni successive.
In un prompt elevato di Windows PowerShell, inizia utilizzando Get-VM per trovare il GUID della VM. Avrai bisogno di conoscere il nome della VM non responsiva per fare ciò. Se devi confermare il nome della VM, esegui Get-VM per vedere un elenco di tutte le VM in esecuzione sul dispositivo.
Quando AD è inattivo, ogni minuto conta
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
Una volta che si ha il nome della VM, eseguire il comando seguente, sostituendo ‘Windows 11’ con il nome della VM che si desidera arrestare:
$VmGUID = (Get-VM 'Windows 11').id
Il passo successivo è utilizzare Get-WMIObject per trovare l’ID del processo della VM. Qui utilizziamo lo spazio dei nomi Win32_Process Gestione Strumentale di Windows (WMI) per trovare un processo CPU in esecuzione che corrisponda a vmwp.exe e all’GUID ($VmGUID) della nostra macchina virtuale.
$VMWMProc = (Get-WMIObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VmGUID})
Una volta ottenuto l’ID del processo ($VMWMProc), possiamo utilizzare il cmdlet Stop-Process per eliminarlo:
Stop-Process ($VMWMProc.ProcessId) –Force
Forzare lo spegnimento di tutte le VM
L’altro modo per forzare lo spegnimento di una VM che non risponde è arrestare il servizio Hyper-V. Ma questo metodo spegnerà tutte le VM in esecuzione sul server. Proprio come nel metodo precedente, è necessario eseguire il seguente comando in una finestra di PowerShell con privilegi elevati, ovvero con privilegi amministrativi locali.
Get-Service vmms | Restart-Service
Riavviare il servizio Hyper-V (vmms) può richiedere parecchio tempo. Quindi, non preoccuparsi se ci vogliono diversi minuti per arrestarlo e poi riavviarlo nuovamente.
Articoli correlati:
Source:
https://petri.com/how-to-stop-an-unresponsive-hyper-v-virtual-machine/