PowerCLI de VMware se está convirtiendo en la interfaz ubicua para los administradores de virtualización de hipervisor de hardware compatible con ESXi. Aprender a administrar VMware a través de PowerShell y PowerCLI es una gran adición a su conjunto de herramientas. En este tutorial de PowerCLI, aprenderás cómo hacer precisamente eso.
En este tutorial, aprenderás:
- los conceptos básicos de la conexión a la infraestructura de VMware con PowerCLI
- familiarizarte con los cmdlets para trabajar con objetos de VMware
- empoderarte con el conocimiento para explorar
- administrar VMware aún más a través de PowerCLI
¡Vamos a ello!
Lo que necesitas tener y saber
Antes de adentrarte demasiado en este tutorial de PowerCLI, es importante asegurarse de que tú y yo estemos en la misma página. Para este artículo, voy a asumir que:
- Tienes experiencia básica en PowerShell. No es necesario que seas un experto en PowerShell, de ninguna manera, pero cualquier familiaridad que tengas con PowerShell te será útil.
- Tienes un host de VMware ESXi o un appliance vCenter para conectar y probar
- Estás trabajando en una estación de trabajo Windows (O Mac / Linux)
- Ya tienes PowerCLI instalado y estás conectado. Si no es así, consulta este artículo de instalación de PowerCLI.
I’ll be using PowerCLI v 11.4.0. I will be working from a Windows 10 workstation with Windows PowerShell 5.1, but you’re welcome to use PowerShell 6 instead as there’s feature parity for this tutorial.
Recopilar información sobre los hosts de ESXi con PowerCLI
Antes de sumergirte en la capa virtual de nuestro entorno vSphere, es una buena idea revisar la capa de hardware físico. VMware PowerCLI proporciona un cmdlet directamente para este propósito, para recopilar información detallada llamado Get-VMHost
.
Mientras estás conectado a tu servidor vCenter o host ESXi, ejecuta el siguiente cmdlet.

Dado que estoy conectado a un Appliance de servidor vCenter que gestiona dos hosts ESXi separados, se me proporciona información básica sobre los hosts que están siendo gestionados. El Get-VMHost
te permite revisar las capacidades de hardware de tus hosts de virtualización. Sin embargo, por defecto, Get-VMHost
no devuelve toda la información que puede.
Si canalizas el cmdlet Get-VMHost
a Format-List
, obtendrás una salida de consola con toda la información sobre los hosts dados.

Get-VMHost | Format-List
Alternativamente, puedes ser más selectivo y solo seleccionar propiedades individuales en el objeto VMHost con el que estás trabajando, como:
Aprovechar esta salida más detallada proporcionará una visión aún mayor del hardware subyacente que ejecuta tus cargas de trabajo virtualizadas. Algunas de las informaciones, en particular, serían:
- Información de validación de la licencia
- Totales de CPU/Memoria
- Modelo del fabricante de hardware
- Nombre de host DNS
Después de la revisión, esto se puede compilar en un archivo CSV, quizás utilizando el Export-CSV
cmdlet.
Inspeccionar VMs con PowerCLI
Vamos a sumergirnos ahora en otro tema en este tutorial de PowerCLI revisando los hosts virtuales, es revisar qué máquinas virtuales están actualmente presentes en un host ESXi dado.
El comando Get-VM
es un comando útil que puedes usar para revisar la información de las MV.
La salida de este cmdlet se verá algo así:

La salida anterior proporciona una lista completa de estado de las MV que se están ejecutando actualmente en un host dado. Si eligieras no especificar un host individual, como he hecho anteriormente, recibirás una tabla de información para cada host subsiguiente y las MV en cada uno.
Si alguna vez estás resolviendo un problema y necesitas saber el número de máquinas virtuales en un host dado o tienes la necesidad de usar VMware PowerCLI para recopilar información del host ESXi, puedes usar estos cmdlets en adelante. ¡La funcionalidad de informes que tienes al alcance de tu mano está empezando a expandirse!
Inspeccionar los switches virtuales con PowerCLI
Para aquellos de nosotros encargados de configurar o administrar las redes virtuales de un clúster de vCenter, hay una amplia gama de cmdlets de red para cualquier caso de uso. Si deseas ver los switches virtuales configurados en tu entorno de vSphere, usarás lo siguiente:
Dependiendo del número de redes virtuales y switches virtuales que tengas, tu lista resultante puede ser bastante grande. En mi caso, como ves a continuación, tengo un único DSwitch que es un Distributed Virtual Switch.
En una implementación de vSphere en una empresa donde hay muchos hosts ESXi en un clúster, DSwitches simplifican la implementación de switches virtuales y grupos de puertos en una multitud de hosts con la misma configuración. Esto ahorra en el trabajo manual de crear configuraciones de red idénticas en cada host manualmente, ¡y es una excelente manera de escalar tu clúster!

Encontrar VMs Conectadas a una Red Virtual con PowerCLI
Al intentar reducir el alcance de un problema, es posible que te preguntes qué VMs están conectadas a qué redes. Para averiguarlo, puedes usar el comando Get-VirtualPortGroup
. Aprendamos sobre este cmdlet en este tutorial de PowerCLI.
A port group is essentially a virtual network. To display all port groups, run Get-VirtualPortGroup
without any parameters. You should then see a listing of all virtual port groups present in your vSphere environment.

Para encontrar todas las VMs dentro de ese grupo de puertos (DPortGroup en mi caso), puedes ejecutar el script a continuación. Asegúrate de reemplazar el valor DPortGroup con el nombre de tu Grupo de Puertos Virtuales.
En esta única línea, obtenemos una lista de todas las máquinas virtuales que existen en este dispositivo vCenter y luego filtramos con el cmdlet Where-Object
para obtener solo aquellas VMs con un nombre de red que coincida con nuestro Grupo de Puertos.

Con esta salida, podrás definir qué máquinas están conectadas y configuradas para cada red.
Cuando te pidan ubicar y analizar qué VMs están conectadas a una red específica en VMware, ahora podrás ofrecer una solución de informes PowerCLI a esta pregunta.
Obteniendo Información sobre la Versión del SO en tus VMs con PowerCLI
La mayor parte del trabajo administrativo dentro de VMware se realiza a nivel de máquina virtual. Es probable que recibas innumerables solicitudes para tareas como recuperar una lista de todos los tamaños de disco duro en las VM o obtener las versiones del sistema operativo invitado para todos tus servidores, entre otras.
Estas tareas son tediosas a gran escala. PowerCLI puede simplificarlas con algunos cmdlets importantes para agregar a tu arsenal, así que cubramos eso en este tutorial de PowerCLI.
Es posible que en algún momento te hayan preguntado: “¿Cuántos servidores Ubuntu tenemos en nuestro clúster VMware?”. Es posible que luego hayas pasado demasiado tiempo haciendo clic en vCenter buscando una respuesta. PowerCLI puede agilizar este proceso al examinar los objetos de VM en vCenter y aplicar algo de magia de PowerShell en la salida.
Echa un vistazo al siguiente script que recopila información de VM. Este fragmento utiliza el comando Get-View
, del cual hablaremos un poco más adelante, pero por ahora, debes saber que es una forma avanzada de recuperar propiedades de objetos VMware. En este caso, estamos recopilando propiedades anidadas que son más fáciles de recuperar de esta manera.
El código anterior está recuperando una lista de máquinas virtuales a través del cmdlet Get-VM
de PowerCLI, ordenando dicha lista con el cmdlet Sort-Object
de PowerShell, y luego recuperando algunas de las propiedades del objeto usando el cmdlet Get-View
de PowerCLI.
Ejecutar esto en mi entorno produce el siguiente resultado. Puedes ver el nombre de la VM en vCenter, el SO configurado
que es cómo está configurado el hardware virtual de VMware para interpretar el sistema operativo invitado, y el SO en ejecución
que representa el sistema operativo real.

Con las VMs replicant y Scriptrunner apagadas en el clúster, no podrás ver el valor de Running OS
para ellas. El sistema operativo se recopila mediante el servicio VMware Tools. Si no está disponible, PowerCLI no puede obtener la información del sistema operativo.
Creando informes CSV con PowerCLI
VMware Tools es un servicio dentro del sistema operativo para las VM de Windows y Linux que proporciona al hipervisor información adicional y capacidades administrativas. Comúnmente, esto incluirá apagado limpio, información del sistema operativo y una visualización de consola de mayor resolución de las VM.
A convenient way to report on and provide this information would be to pipe the above script into the Export-CSV
cmdlet. Export-Csv
will create a CSV file with the same information you see in the console.
Después de ejecutar el código anterior, deberías poder abrir el archivo CSV con Excel para revisar el informe.

Inspeccionando Discos Duros Virtuales con PowerCLI
El comando Get-Harddisk
es otro comando útil para conocer. El cmdlet Get-HardDisk
te permite inspeccionar información sobre discos duros virtuales conectados a las VMs.
Por ejemplo, para consultar información sobre el disco duro virtual conectado a la VM exchange1, podrías ejecutar lo siguiente:

Alguna de esta información puede ser redundante, como la capacidad en KB vs. GB. Pero hay valor en conocer el StorageFormat
(tipos de aprovisionamiento delgados/gruesos). Y conocer el nombre del archivo VMDK.
Por ejemplo, si ves un problema común y todos los discos duros de las VM residen en el mismo volumen de almacén de datos, este conocimiento puede acelerar la solución de problemas.
Inspeccionando Adaptadores de Red Virtuales con PowerCLI
Además de revisar la información del disco duro de sus máquinas virtuales, es posible que también desee verificar los adaptadores de red virtuales. Para verificar estas propiedades en una sola VM, puede utilizar el cmdlet Get-NetworkAdapter
.
Mientras buscaba anteriormente en este puerto todas las VM que residían en la misma red, esta vez solo desea ver los adaptadores conectados a una VM específica.

Esto es útil si está solucionando problemas en VM con varios adaptadores de red conectados. Puede determinar rápidamente y de un vistazo si esos adaptadores están conectados a las redes correctas.
Ejecución de scripts de PowerShell en VM con Invoke-VMScript
Usando el cmdlet Invoke-VMScript
, también puede ejecutar código PowerShell directamente dentro de la VM; no es necesaria conectividad de red. Si alguna vez ha utilizado PowerShell Direct dentro de un entorno Hyper-V, esta será una experiencia similar.
En lugar de crear una sesión de PowerShell Remoting o usar el cmdlet Invoke-Command
a través de la red, el cmdlet Invoke-VMScript
puede enviar comandos directamente a la VM sin la conectividad normal de WinRM o SSH.
Como ejemplo, tal vez desee realizar una simple lista de directorios en una VM llamada exchange1. Para hacerlo, pasaría dir C:\
como valor para el parámetro ScriptText
, como se muestra a continuación.
Los resultados son como si hubieras ejecutado los comandos desde la consola de la VM misma. Invoke-VMScript
luego transmite toda la salida del comando que se ejecutó en la VM.

Aunque este es un ejemplo básico, puedes complicarlo tanto como desees. Este cmdlet de PowerCLI te permite especificar tipos de lotes, PowerShell o Bash dentro del parámetro ScriptText
.
También puedes avanzar más. A continuación, puedes ver cómo usar Invoke-VMScript
para ejecutar código PowerShell usando una variable $script
separada para el parámetro ScriptText
. Esto nos permite crear una entrada de script más personalizada para que la VM la procese.
El valor del parámetro ScriptText
necesita ser una cadena. Por eso, la variable $script
tiene comillas simples como necesidad.
Tal vez también hayas notado el uso del parámetro GuestCredential
. Este parámetro se utiliza para autenticarse en el sistema operativo de la VM. Es especialmente útil si deseas ejecutar el script como una cuenta diferente.
Tu script en acción debería dar como resultado una salida similar a la siguiente.

El resultado de este script nos proporciona la información del disco de la VM. Basándonos en eso, deberías saber que es una VM remota debido al nombre amigable de la unidad, VMware Virtual Disk
.
Avanzando con Get-View
Puede que hayas visto que algunas de las cmdlets básicas devuelven una propiedad llamada ExtensionData
. Puedes encontrar esta propiedad al enviar muchas cmdlets de PowerCLI al cmdlet Get-Member
de PowerShell. Si te preguntabas qué era eso, ahora es tu oportunidad de descubrirlo.
El siguiente paso en esta empresa es entender el cmdlet Get-View
. VMware PowerCLI utiliza muchas consultas diferentes a la máquina virtual para proporcionar la salida bonita y sencilla de Get-VM
. Pero hay mucho bajo el capó que solo es accesible usando el cmdlet Get-View
.
Es probable que veas muchos scripts que usan este cmdlet. Te convendría pasar un tiempo acostumbrándote a ver este cmdlet en acción. Para familiarizarte, utiliza el cmdlet Get-View
para obtener información sobre una máquina virtual (exchange1 en este ejemplo).
Puedes ver que las opciones de Filter
de este cmdlet requieren el uso de una hashtable de PowerShell y no valores de cadena individuales. ¡Ten cuidado al construir tus propios scripts únicos!
El resultado del comando anterior es una gran cantidad de información de configuración anidada y opciones de método para tomar acciones contra la VM o obtener propiedades del objeto.

Si usas el mismo script anterior y envías la salida a una variable, puedes inspeccionar esas opciones anidadas con la notación de punto. Aquí puedes ver y recuperar toda esa información adicional del sistema operativo invitado, que tal vez quieras informar a través de PowerCLI.

Quizás te gustaría seleccionar una sola propiedad. Si es así, podrías ejecutar lo siguiente para reducir a un valor individual.
Hay muchas opciones de Get-View
para todo tipo de objetos de VMware. Siéntase libre de explorar todas estas opciones y revisar este artículo informativo de VMware que profundiza en este potente cmdlet.
VMware Code Capture: Aprenda de sus clics
Si desea aprovechar PowerCLI pero prefiere no construir código escribiendo, Code Capture en vCenter está aquí para usted. Code Capture es una nueva herramienta para desarrolladores que actúa de manera similar al Centro Administrativo de Directorio Activo. Vamos a cubrir Code Capture en este tutorial de PowerCLI.
Esta herramienta registra todas las acciones que realiza dentro de la GUI. Luego transforma todas esas acciones y le proporciona scripts de PowerCLI.
De forma predeterminada, Code Capture no está activado. Para activarlo, abra su appliance de vCenter y vaya a Menú –> Centro de Desarrolladores como se muestra a continuación.

Una vez en la pestaña Centro de Desarrolladores, active la opción Activar Code Capture.

Cuando habilite Code Capture, verá un botón Grabar rojo en el encabezado de su vCenter. Una vez habilitado, siempre que desee que se registre una acción y se convierta en salida de PowerCLI, debe grabar la actividad de la GUI presionando el botón grabar.

El botón rojo grabar aparecerá junto a la sección de usuario conectado de vCenter para que ahora pueda grabar en cualquier momento.
Para demostrar Code Capture, sigue el asistente de creación de Nueva Máquina Virtual.
- Haz clic en el botón Grabar para comenzar a grabar. Esto hará que el botón rojo Grabar comience a parpadear.
- Haz clic derecho en tu host de VMware y Crea una Nueva Máquina Virtual. Sigue el asistente resultante para crear una nueva máquina virtual con los valores predeterminados.
- Una vez creada la máquina virtual, haz clic en el botón de grabación para detener la grabación.
Es posible que la salida resultante sea un poco más detallada de lo esperado. La salida incluso incluye todas las acciones de navegación por la interfaz gráfica antes de crear la VM. Pero deberías ver una sección que comienza con CreateVM_Task
en los comentarios. Aquí es donde comienza el código para crear una VM.
A continuación se muestra una parte de la salida de CreateVM_Task del proceso del Asistente de Nueva VM en la interfaz gráfica a través de Code Capture:

Esta salida puede resultar un poco abrumadora, pero te muestra directamente la cantidad de opciones de configuración disponibles para tus máquinas virtuales. Dependiendo de tus necesidades, ahora tienes el poder de realizar ajustes en tus propios scripts y personalizarlos a tu gusto.
La utilidad Code Capture no se limita solo a la creación de VM. También puede generar código para cambios de red, pequeñas modificaciones de VM o cambios de configuración de host. Al poder revisar la salida de PowerCLI de las acciones de la GUI, puedes acortar tu camino hacia la implementación de la infraestructura como código.
Resumen del Tutorial de PowerCLI.
En este artículo, has cubierto mucho terreno. ¡Buen trabajo! Espero que hayas notado el poder que PowerCLI aporta a la gestión de la infraestructura de VMware.
Hay muchos cmdlets en PowerCLI para una amplia gama de bases de productos, pero solo cubrimos algunos aquí. ¡Asegúrate de estar atento a este blog para más artículos sobre esta herramienta impresionante!