Chica delante de la pantalla de un robot gigante que no se deja dominar, Imagen creada con Bing Image CreatorHyper-V es la plataforma de virtualización de Microsoft, y viene integrada en todas las ediciones de Windows, aunque la oculten en las ediciones más baratas para que no la uses (pero puedas utilizarlo igual si quieres). Este hipervisor funciona bastante bien en general, aunque, como todo, a veces da problemas.

Un problema que ocurre a veces y te puede desesperar si trabajas tan solo con la interfaz de usuario (o sea, con el Administrador de Hyper-V) es que no hay manera de parar/apagar una máquina virtual. Cuando le das al botón de apagar lo único que obtienes es un diálogo de que no se ha podido detener la máquina virtual, sin muchas más explicaciones:

El diálogo tan solo indica que no se puede detener la máquina virtual, pero da muy pocas pistas y ninguna solución.

Puede ser desesperante.

No obstante, hay soluciones genéricas que podemos usar desde el terminal (PowerShell) y que seguro que te ayudan a poner la máquina bajo control. Vamos a verlas...

1.- Comando propio de Hyper-V para detener máquinas virtuales

Antes de nada, averigua el nombre exacto de la máquina virtual díscola que quieres detener. Puedes verla desde el Administrador de Hyper-V (win11S en la imagen anterior).

Abre una terminal de PowerShell con permisos de administración (si no obtendrás un error).

Puedes averiguar todos los datos de la máquina virtual que quieres detener con el comando Get-VM seguido del nombre de la misma, por ejemplo: Get-VM win11s. Aunque por pantalla verás solo unos pocos datos sobre la máquina, como su estado actual, el uso de CPU y memoria, etc... en realidad, este comando devuelve un objeto muy completo con mucha más información sobre la VM. Dicho objeto se lo podemos pasar a cualquier otro comando de PowerShell para hacer cosas con la información. Uno de estos comandos es Stop-VM que toma uno de estos objetos de información y lo usa para parar la máquina virtual.

Cuando pulsas el botón de Detener la máquina virtual desde el Administrador de Hyper-V, es como si estuvieses llamando a este comando, por lo que usándolo tan solo con las opciones por defecto no te servirá de mucho y te dará el mismo error. Pero dispone de un modificador que nos permite forzar la detención en casi todas las circunstancias: -force, que es el que vamos a utilizar.

Para ello le pasaremos los datos de la máquina utilizando el operador "pipe" o "barra vertical" (|) de la siguiente manera: Get-VM win11s | Stop-VM -force:

Ejecución del comando

No muestra mensaje alguno por pantalla, pero casi seguro que detendrá tu máquina virtual. Compruébalo, y si no es así, sigue leyendo....

2.- Utilizar el Host Compute Service de Hyper-V

El Host Compute Service de Microsoft (HCS) es una API de bajo nivel y una herramienta para diagnóstico y control de máquinas virtuales y contenedores en Windows. Si tienes instalado Hyper-V en una versión moderna de Windows, tienes instalado también HCS.

Puedes acceder a HCS desde la línea de comandos utilizando la herramienta hcsdiag.exe. Tiene muchos modificadores que puedes ver con tan solo ejecutarla, pero para este caso concreto nos hacen falta 2: list y kill, que puedes ver señalados en la siguiente captura:

Lista parcial de comandos admitidos por hcsdiag.exe 

Lo primero que debemos hacer es listar las máquinas virtuales que tenemos en Hyper-V, para lo cual tenemos el modificador list. Por desgracia este subcomando/modificador nos devuelve tan solo el identificador único de cada máquina virtual, pero no su nombre, por lo que no podemos "casarla" con la máquina que nos interesa.

Por ello, y dado que necesitamos dicho identificador para poder pararla, lo mejor es utilizar de nuevo el comando Get-VM con el nombre de ésta para obtenerlo. Como te decía antes, por pantalla solo se muestran unas pocas propiedades el objeto devuelto, pero no la que nos interesa, llamada VMId. Podemos mostrar la propiedad que nos interese con el comando Format-Table de PowerShell (o su acortado FT, aunque a mí me gusta más ser explicito siempre y así saber con mayor claridad qué estoy haciendo). Así que si escribimos Get-VM win11s 1 Format-Table Name, VMId, obtendremos por pantalla el nombre (más que nada por reverificar) y el identificador de la máquina virtual.

El primer comando devuelve solo los identificadores, así que usamos el segundo para averiguar el de nuestra máquina virtual

Selecciona el identificador con el ratón y pulsa con el botón derecho para copiarlo al portapapeles, ya que es demasiado largo como para "picarlo".

Ahora es cuando vamos a usar hcsdiag.exe para "matar" a la máquina virtual. Simplemente utiliza su modificador kill seguido del identificador único de la máquina virtual:

El comando, que no devuelve ningún mensaje de éxito: simplemente vuelve

¡Listo! Eso sí, hay que tener en cuenta una cosa importante: este comando "mata" el proceso de manera descontrolada para Hyper-V por lo que, en cuanto lo hayas "matado", Hyper-V reinicia la máquina virtual de inmediato. Si te interesa que esté parada apresúrate a detenerla desde el Administrador de Hyper-V o con el comando que vimos en el punto 1, ya que mientras esté arrancando te lo va a permitir casi seguro ¿de acuerdo?

¡Espero que te resulte útil!

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA