Contents

Cómo utilizar esxcli desde PowerCLI

Si frecuentemente administras algún tipo de infraestructura vSphere lo más probable es que hayas tenido que tirar en más de una ocasión de esxcli para realizar configuraciones avanzadas, automatizaciones o troubleshooting de algún tipo. En la entrada de hoy veremos cómo utilizar esxcli desde PowerCLI y así integrarlo en nuestros scripts o en nuestras sesiones con la terminal.

Invocando esxcli desde PowerCLI

Lo primero que deberemos hacer para empezar a utilizar la funcionalidad de esxcli desde PowerCLI es exponer su funcionalidad a nuestra sesión de terminal. Para ello nos valdremos del cmdlet Get-EsxCli:

1
$esxcli = Get-EsxCli -V2 -VMHost 192.168.100.131

Como podemos ver hemos pasado el resultado del cmdlet a una variable. Esto lo hacemos para, en las futuras invocaciones de esxcli, valernos de ella para utilizar su funcionalidad.

Repasemos un poco la línea:

  • -V2: Especificamos que utilice la versión 2 del cmdlet, que nos permite utilizar los argumentos de los métodos utilizando su nombre en vez de utilizar su posición. Por defecto se utiliza la versión 1, pero va a ser eliminada en futuras releases, por lo que mejor acostumbrarse a utilizar la 2.
  • -VMHost: El host contra el que utilizaremos los comandos de esxcli.

Cómo utilizar esxcli desde PowerCLI

Una vez tenemos expuesta la funcionalidad de esxcli a nuestra sesión de PowerCLI toca empezar a bregar con ella. Dado que tenemos la sesión en nuestra variable $esxcli podemos mostrar los namespaces de esxcli que tenemos disponibles:

/wp-content/uploads/2018/08/esxcli-desde-powercli.png
esxcli desde powercli

Como podemos ver son los mismos que tenemos disponibles desde la propia consola de esxcli. Si queremos ver los namespace anidados iremos profundizando en el objeto como lo haríamos con las propiedades de cualquier otro:

/wp-content/uploads/2018/08/esxcli-desde-powercli-namespaces-anidados.png
esxcli desde powercli namespaces anidados

Aquí ya podemos ver algo nuevo, en la parte inferior vemos un apartado con los métodos de este namespace, en este caso Help. Pero aún podemos profundizar más en network:

/wp-content/uploads/2018/08/esxcli-desde-powercli-namespaces-anidados2.png
esxcli desde powercli namespaces anidados2

Ya aquí podemos probar a invocar uno de los nuevos métodos que han aparecido añadiendo su nombre y .Invoke() al final:

/wp-content/uploads/2018/08/esxcli-desde-powercli-metodos.png
esxcli desde powercli métodos

En este caso es muy sencillo puesto que el método list no requiere de parámetros. Si quisiéramos utilizar un método que requiriera parámetros lo primero que deberíamos hacer sería ver los parámetros disponibles. Vamos a consultar los de $esxcli.network.diag.ping añadiendo .Help() al final:

/wp-content/uploads/2018/08/esxcli-desde-powercli-help.png
esxcli desde powercli help

Como podemos ver lo primero que nos dice es qué hace el método, que en este caso es enviar una petición de ping desde el nodo al que estamos conectados (acción muy útil si queremos hacer troubleshooting de red). En nuestro caso nos interesa indicar a que destino enviamos los paquetes, por lo que utilizaremos el parámetro host, y diremos que queremos enviar 5 paquetes con el parámetro count:

/wp-content/uploads/2018/08/esxcli-desde-powercli-ping.png
esxcli desde powercli ping

Cabe añadir que aquí muestro directamente la propiedad Summary del objeto devuelto para ver un resumen de lo que ha pasado en la petición de ping. El resumen de la captura es que los 5 pings transmitidos han sido recibidos, por lo que se podría determinar que no existen problemas de conectividad.

Conclusión

Si bien muchas acciones de esxcli se pueden realizar directamente desde PowerCLI existen pequeñas joyas de la veterana shell que nos pueden servir en más de un escenario. Invocar esxcli desde PowerCLI nos va a permitir incluir esas funcionalidades en nuestros scripts sin tener que hacer llamadas a otras shells.