Cómo ejecutar PowerShell y PowerCLI desde Docker

Con la aparición de PowerShell Core se abrió un inmenso abanico de posibilidades a la hora de ejecutar PowerShell desde distintos sistemas operativos. Hoy en día es posible ejecutar PowerShell en Linux y en MacOS, cosa que años atrás era impensable con Windows PowerShell. En los últimos tiempos son muchos los módulos que se han adaptado para poder correr en PowerShell Core, entre ellos PowerCLI. En la entrada de hoy vamos a avanzar un paso más y vamos a ver cómo ejecutar PowerShell y PowerCLI desde Docker.

Cómo ejecutar PowerShell y PowerCLI desde Docker

Descargando las imágenes de Docker de PowerShell y PowerCLI

Una de las grandes bazas a favor de Docker es la gran cantidad de imágenes de contenedores que podemos encontrar en su Docker Hub. Tanto Microsoft como VMware en los últimos tiempos han estado acercándose hacia el software libre y eso se nota en este caso, ya que podemos encontrar imágenes oficiales de Microsoft y VMware en Docker Hub para PowerShell y PowerCLI.

Si queremos descargar la imágen de Docker de PowerShell podemos ejecutar:

Descarga de imágen Docker de PowerShellPara descargar la imágen de Docker de PowerCLI ejecutaremos lo siguiente:

Descarga de imagen Docker de PowerCLI

Inspeccionando los contenedores de PowerShell y PowerCLI

Una vez tenemos los contenedores descargados podemos entrar a inspeccionarlos para ver qué tenemos dentro.

Para entrar en el contenedor de forma interactiva podemos ejecutar:

docker run --rm -it mcr.microsoft.com/powershell

Vamos a revisar parte por parte:

  • docker run: Ejecutamos un nuevo contenedor.
  • –rm: Elimina automáticamente el contenedor una vez salgamos de él.
  • -it: Ejecutamos el contenedor de forma interactiva.
  • mcr.microsoft.com/powershell: Indicamos la imagen que utilizaremos para crear nuestro nuevo contenedor.

Una vez dentro podemos ver los detalles del contenedor:

Detalles docker PowerShell

Como se aprecia en la imagen tenemos una versión 6.1.1 de PowerShell Core corriendo en una Ubuntu 18.04.

Si hacemos lo propio con la imágen de PowerCLI:

Detalles docker PowerCLIEn este caso vemos que se trata de una versión 6.0.1 de PowerShell Core corriendo sobre PhotonOS 2.0. Además podemos ver que el contenedor trae 28 módulos de VMware, con lo que desde éste podremos correr comandos contra toda clase de productos de la compañía.

Ejecutando scripts de PowerShell y PowerCLI desde Docker

Hasta aquí todo puede quedar como algo anecdótico, pero en el momento en el que somos capaces de pasarle código para ejecutar a nuestro contenedor podemos empezar a encontrar utilidad a la ejecución de PowerShell y PowerCLI desde Docker.

Para ejecutar un script dentro del contenedor necesitaremos, antes que nada, tener dicho script en alguna ubicación de la máquina que correrá el contenedor. Para nuestro caso será el siguiente script ubicado en C:\Scripts\Hola-Mundo.ps1:

Write-Host "Hola desde Sobrebits.com en PSCore $($PSVersionTable.PSVersion)"

Nada muy complicado, un simple “Hola mundo” que nos mostrará la versión de PowerShell Core de nuestro contenedor.

Ahora ya podemos pasar a ejecutarlo en ambos contenedores:

docker run --rm -it --entrypoint='/usr/bin/pwsh' -v C:/Scripts:/tmp/scripts mcr.microsoft.com/powershell /tmp/scripts/Hola-Mundo.ps1
Hola desde Sobrebits.com en PSCore 6.1.1
docker run --rm -it --entrypoint='/usr/bin/pwsh' -v C:/Scripts:/tmp/scripts vmware/powerclicore /tmp/scripts/Hola-Mundo.ps1
Hola desde Sobrebits.com en PSCore 6.0.1

Repasemos lo que acabamos de hacer:

  • docker run: Ejecutamos un nuevo contenedor.
  • –rm: Elimina automáticamente el contenedor una vez salgamos de él.
  • -it: Ejecutamos el contenedor de forma interactiva.
  • –entrypoint=’/usr/bin/pwsh’: Especificamos el ejecutable a iniciar cuando el contenedor arranca, en nuestro caso el binario de PowerShell Core.
  • -v C:/Scripts:/tmp/scripts: Montamos la carpeta C:\Scripts de nuestra máquina anfitriona en el volumen /tmp/scripts del contenedor.
  • mcr.microsoft.com/powershell: Indicamos la imagen que utilizaremos para crear nuestro nuevo contenedor.
  • /tmp/scripts/Hola-Mundo.ps1: El script que ejecutaremos mediante PowerShell Core en nuestro contenedor.

Como vemos cada contenedor ha devuelto su versión de PowerShell Core. Con esto ya deberíamos ser capaces de lanzar nuestros propios scripts tanto de PowerShell como de PowerCLI desde Docker sin problema.

Conclusión

Ejecutar scripts de PowerShell y PowerCLI desde Docker nos va a permitir hacer nuestras automatizaciones portables a cualquier plataforma capaz de correr Docker y nos puede ayudar a ejecutar scripts de PowerShell de forma programada con un menor consumo de recursos.

¡Os animo a probarlo!

Deja un comentario