Cómo exportar una máquina virtual con PowerCLI

En más de una ocasión me ha tocado exportar una máquina virtual de un vCenter para luego cargarla en otro y, por algún oscuro misterio, la exportación del cliente web de vSphere no me lo ha permitido. En esas situaciones nos puede ser muy útil saber exportar una máquina virtual con PowerCLI, una tarea la mar de sencilla que además nos aportará algunas funciones extra.Cómo exportar una máquina virtual con PowerCLI

Encontrando el cmdlet correcto

Cuando instalamos PowerCLI en nuestra máquina podemos ver que éste se compone de varios módulos. Los módulos relacionados con vSphere se encuentran en VMware.VimAutomation.Core, por lo que siempre que queramos buscar un módulo de vSphere deberemos buscar en él.

Sabiendo esto vamos a ver qué cmdlets tenemos disponibles que contengan el verbo ‘Export’:

Exportar máquina virtual con PowerCli

Como podemos ver existe el cmdlet Export-VM, que tiene pinta de hacer lo que estamos buscando, pero un detalle importante es que éste es un Alias de Export-VApp como podemos ver en la columna CommandType. Dado que es un alias y que en Hyper-V ya existe un cmdlet llamado Export-VM para esta entrada utilizaremos el cmdlet original: Export-VApp.

Exportar una máquina virtual con PowerCLI mediante Export-VApp

Ahora que ya tenemos localizado el cmdlet que vamos a utilizar podemos ponernos en marcha. Exportar una VM con PowerCLI es tan sencillo como:

# Obtenemos la VM a exportar
$Vm = Get-VM -Name 'Sobrebits VM'

# Apagamos la VM para poderla exportar
$Vm | Stop-VM

# Exportamos la VM
$Vm | Export-VApp -Destination 'C:\Export\'

Vamos a repasar el código:

  • Línea 2: Aquí obtenemos la máquina virtual a exportar con PowerCLI y la guardamos en la variable $Vm con la que trabajaremos en adelante.
  • Línea 5: Apagamos la VM para poder exportarla.
  • Línea 8: Exportamos la máquina virtual y marcamos el Path en el que ubicar los archivos de la misma con la variable -Destination.

Cuando acabe la exportación deberíamos ver algo parecido a esto:

Máquina exportada a OVF con PowerCLI

Este es el uso básico del cmdlet, pero si consultamos su ayuda podemos ver que dispone de alguna funcionalidad extra la mar de interesante:

# Exportamos la VM a OVA y de forma asíncrona
$Vm | Export-VApp -Destination 'C:\Export\' -RunAsync -Format Ova

Vamos a explicar los dos nuevos parámetros:

  • RunAsync:  Este parámetro es común en muchos otros comandos de PowerCLI. Si activamos este flag la tarea que estemos ejecutando (en este caso la exportación de una VM) se ejecuta en segundo plano y nos libera al instante la línea de comandos. Esto nos puede ser útil si queremos ejecutar más de una exportación a la vez puesto que las podemos dejar como tareas y seguir trabajando en nuestra sesión actual de PowerCLI.
  • Format: Por defecto este cmdlet exporta las máquinas virtuales en formato .ovf. Utilizando -Format podemos alterar este comportamiento y exportar una máquina virtual a .ova desde PowerCLI, con lo que conseguiremos tener empaquetada nuestra máquina virtual en un solo archivo.

Una vez finalice la exportación de la VM a OVA podremos ver que en la carpeta existe un único archivo .ova:

Exportar OVA con PowerCLI

Conclusión

Con Export-VApp vamos a ser capaces de ejecutar tareas de exportación de máquinas virtuales desde la línea de comandos, lo que combinado con un poco de scripting básico y la programación de la ejecución de los mismos puede resultar en exportacines de VMs fuera de horario y de forma totalmente desatendida.

Espero que os haya gustado la entrada.

¡Nos leemos en la próxima!

Deja un comentario