Adam el Automator

PowerCLI de VMware se está convirtiendo en la interfaz ubicua para los administradores de virtualización de hipervisores de hardware compatible con ESXi. Aprender a administrar VMware a través de PowerShell y PowerCLI es una importante adición a su kit de herramientas. En este tutorial de PowerCLI, aprenderás a hacer precisamente eso.

En este tutorial, aprenderás:

  • los conceptos básicos para conectarse a la infraestructura de VMware con PowerCLI
  • familiarícese con cmdlets para trabajar con objetos de VMware
  • Empodere con el conocimiento para explorar
  • administrar VMware más a fondo a través de PowerCLI

¡Manos a la obra!

Tabla de contenidos

Lo que necesita Tener y Saber

Antes de llegar demasiado lejos en este tutorial de PowerCLI, siempre es importante asegurarse de que usted y yo estemos en la misma página. Para este artículo, voy a suponer que:

  • Tiene una experiencia básica de PowerShell. No tiene que ser un experto en PowerShell, de ninguna manera, pero cualquier familiaridad con PowerShell que tenga le servirá bien.
  • Tiene un host VMware ESXi o un dispositivo vCenter para conectarse y realizar pruebas
  • Está trabajando en una estación de trabajo Windows (o Mac/Linux)
  • Ya tiene PowerCLI instalado y está conectado. Si no es así, consulte este artículo de instalación de PowerCLI.

Usaré PowerCLI v 11.4.0. Trabajaré desde una estación de trabajo de Windows 10 con Windows PowerShell 5.1, pero puede usar PowerShell 6 en su lugar, ya que hay paridad de características para este tutorial.

Recopile información sobre Hosts ESXi con PowerCLI

Antes de sumergirse 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 fin, para recopilar información detallada llamada Get-VMHost.

Mientras esté conectado a vCenter server o host ESXi, ejecute el cmdlet siguiente.

PS51> Get-VMHost
Get-VMHost
Get-VMHost

Dado que estoy conectado a un dispositivo de servidor vCenter que administra dos hosts ESXi separados, se me proporciona información básica sobre los hosts que se administran. El Get-VMHost le permite revisar las capacidades de hardware de sus hosts de virtualización. Pero, de forma predeterminada, Get-VMHost no devuelve toda la información que puede.

Si canaliza el cmdlet Get-VMHost a Format-List, obtendrá la salida de consola para toda la información sobre los hosts dados.

Get-VMHost | Format-List
Get-VMHost | Format-List

como alternativa, puede ser más selectivos y sólo seleccione propiedades individuales en el VMHost objeto que se está trabajando con:

PS51> Get-VMHost | format-list -Property State,LicenseKey,Version

Aprovechar esta salida más detallada proporcionará una vista aún mayor del hardware subyacente que ejecuta sus cargas de trabajo virtualizadas. Parte de la información, en particular, sería:

  • Información de validación de licencia
  • Totales de CPU/memoria
  • Modelo de proveedor de hardware
  • Nombre de host DNS

Después de la revisión, esto se puede compilar en un archivo CSV, tal vez utilizando el cmdlet Export-CSV.

Inspección de máquinas virtuales con PowerCLI

Ahora profundicemos en otro tema de este tutorial de PowerCLI, revisando los hosts virtuales, revisando qué máquinas virtuales están presentes actualmente en un host ESXi determinado.

El comando Get-VM es un comando práctico que puede usar para revisar la información de la máquina virtual.

PS51> Get-VMHost -Name <Host FQDN> | Get-VM

La salida de este cmdlet se verá como a continuación:

PS51 Get-VMHost-Name FQDN de host | Get-VM
PS51> Get-VMHost-Name | Get-VM

La salida anterior proporciona una lista completa de estado de las máquinas virtuales que se ejecutan actualmente en un host determinado. Si decide no especificar un host individual, como he hecho anteriormente, recibirá una tabla de información para cada host posterior y las máquinas virtuales de cada uno.

Si alguna vez está solucionando un problema y necesita conocer el número de máquinas virtuales en un host determinado o necesita usar VMware PowerCLI para recopilar información de host ESXi, puede usar estos cmdlets en el futuro. ¡La funcionalidad de informes que tiene a su alcance está empezando a expandirse!

Inspección de conmutadores virtuales con PowerCLI

Para aquellos de nosotros encargados de configurar o administrar las redes virtuales de un clúster de vCenter, existe una gama completa de cmdlets de red para cualquier caso de uso. Si desea ver los conmutadores virtuales configurados en su entorno vSphere, utilizará lo siguiente:

PS51> Get-VirtualSwitch

Dependiendo del número de redes virtuales y conmutadores virtuales que tenga, la lista resultante puede ser bastante grande. En mi caso, como se ve a continuación, tengo un solo conmutador DSwitch que es un Conmutador Virtual Distribuido.

En una implementación de vSphere empresarial donde hay muchos hosts ESXi en un clúster, los conmutadores D simplifican la implementación de conmutadores virtuales y grupos de puertos en una multitud de hosts con la misma configuración. Esto ahorra el trabajo manual de crear configuraciones de red idénticas en cada host manualmente, y es una excelente manera de escalar su clúster.

Get-VirtualSwitch
Get-VirtualSwitch

Encontrar VMs Conectado a una Red Virtual con PowerCLI

Mientras que el intento de reducir el ámbito de un problema, usted puede preguntarse que VMs están conectados a la red. Para averiguarlo, puede usar el comando Get-VirtualPortGroup. Aprendamos sobre este cmdlet en este tutorial de PowerCLI.

Un grupo de puertos es esencialmente una red virtual. Para mostrar todos los grupos de puertos, ejecute Get-VirtualPortGroup sin ningún parámetro. A continuación, debería ver una lista de todos los grupos de puertos virtuales presentes en el entorno de vSphere.

Get-VirtualPortGroup
Get-VirtualPortGroup

Para encontrar todas las máquinas virtuales dentro de ese grupo de puertos (DPortGroup en mi caso), puede ejecutar la siguiente secuencia de comandos. Asegúrese de reemplazar el valor DPortGroup con el nombre de su Grupo de puertos Virtuales.

PS51> Get-VM | Where-Object { ($PSItem | Get-NetworkAdapter | where {$_.networkname -match "DPortgroup"})}

En este delineador, obtenemos una lista de todas las máquinas virtuales que existen en este dispositivo vCenter y, a continuación, filtramos con el cmdlet Where-Object para obtener solo aquellas máquinas virtuales con un nombre de red que coincida con nuestro Grupo de puertos.

Obtener máquinas virtuales con solo un grupo de puertos específico
Obtener máquinas virtuales con solo un grupo de puertos específico

Con esta salida, podrá definir qué máquinas están conectados y configurados para cada red.

Cuando se le solicite localizar y analizar qué máquinas virtuales están conectadas a una red en particular en VMware, ahora podrá proporcionar una solución de informes PowerCLI para esta pregunta.

Obtener información sobre la versión del sistema operativo de sus máquinas virtuales con PowerCLI

La mayor parte del trabajo administrativo dentro de VMware se realiza a nivel de máquina virtual. Es probable que reciba innumerables solicitudes para tareas como recuperar una lista de todos los tamaños de disco duro en máquinas virtuales o obtener versiones de SO invitado para todos sus servidores, entre otras.

Estas tareas son engorrosas a escala. PowerCLI puede optimizarlos con algunos cmdlets importantes para agregar a su arsenal, así que cubrámoslos en este tutorial de PowerCLI.

Se le puede haber preguntado en algún momento, » ¿Cuántos servidores Ubuntu tenemos en nuestro clúster de VMware?”. Es posible que haya pasado demasiado tiempo haciendo clic en vCenter en busca de una respuesta. PowerCLI puede agilizar este proceso observando los objetos de la máquina virtual en vCenter y aplicando algo de magia de PowerShell en la salida.

Eche un vistazo al siguiente script que reúne la información de la máquina virtual. Este fragmento utiliza el comando Get-View, que veremos un poco más adelante, pero por ahora, debe saber que es una forma avanzada de recuperar las propiedades de los objetos de VMware. En este caso, estamos reuniendo propiedades anidadas que se recuperan más fácilmente en este método.

PS51> Get-VM | Sort-Object -Property Name | Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") | Select-Object -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}}

El código anterior recupera una lista de máquinas virtuales a través del cmdlet PowerCLI Get-VM, ordena dicha lista con el cmdlet PowerShell Sort-Object y, a continuación, recupera algunas de las propiedades del objeto mediante el cmdlet PowerCLI .

Al ejecutar esto en mi entorno se obtiene el siguiente resultado. Puede ver el nombre de la máquina virtual en vCenter, el Configured OS, que es la forma en que el hardware virtual de VMware está configurado para interpretar el sistema operativo invitado, y el Running OS que representa el sistema operativo real.

Búsqueda de máquinas virtuales en función de varios criterios
Búsqueda de máquinas virtuales en función de varios criterios

Con el replicante de máquinas virtuales y el cluster, no podrá ver el valorRunning OS para ellos. El servicio VMware Tools recopila el sistema operativo. Si no está disponible, PowerCLI no puede extraer la información del sistema operativo.

Crear informes CSV con PowerCLI

VMware Tools es un servicio integrado para máquinas virtuales Windows y Linux que proporciona al hipervisor información adicional y capacidades administrativas. Por lo general, esto proporcionará información del sistema operativo, apagado limpio y visualización de consola de mayor resolución de las máquinas virtuales.

Una forma conveniente de informar y proporcionar esta información sería canalizar el script anterior al cmdlet Export-CSVExport-Csv creará un archivo CSV con la misma información que se ve en la consola.

PS51> Get-VM | Sort-Object -Property Name | Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |Select -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}} | Export-CSV C:\report.csv -NoTypeInformation 

Después de ejecutar el código anterior, debería poder abrir el archivo CSV con Excel para revisar el informe.

Archivo CSV de información de VM
Archivo CSV de información de VM

Inspeccionar discos duros virtuales con PowerCLI

El Get-Harddisk el comando es otro comando útil para conocer. El cmdlet Get-HardDisk le permite inspeccionar información sobre discos duros virtuales conectados a máquinas virtuales.

Por ejemplo, para consultar información sobre el disco duro virtual conectado a las máquinas virtuales exchange1, puede ejecutar lo siguiente:

PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List
consulta de información sobre el disco duro virtual asociado a la exchange1 VMs
Consulta de información sobre el disco duro virtual asociado a la exchange1 VMs

Parte de esta información puede ser redundantes, tales como la capacidad en KB vs GB. Pero hay valor en conocer el StorageFormat(tipos de aprovisionamiento thin/thick). Y conocer el nombre del archivo VMDK.

Por ejemplo, si ve un problema común y todos los discos duros de VM residen en el mismo volumen del almacén de datos, este conocimiento puede acelerar la solución de problemas.

Inspección de 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 comprobar estas propiedades de una sola máquina virtual, puede usar el cmdlet Get-NetworkAdpter.

PS51> Get-NetworkAdapter -VM myVM

Si bien anteriormente había buscado en este puerto todas las máquinas virtuales que residen en la misma red, esta vez solo desea ver los adaptadores conectados a una máquina virtual en particular.

Get-NetworkAdapter
Get-NetworkAdapter

Esto es útil si la solución de problemas de máquinas virtuales que tiene varios adaptadores de red conectados. Puede determinar rápidamente y de un vistazo si esos adaptadores están conectados a las redes adecuadas.

Ejecutar scripts de PowerShell en máquinas virtuales con Invoke-VMScript

Con Invoke-VMScript, también puede ejecutar código de PowerShell directamente dentro de la máquina virtual, sin necesidad de conectividad de red. Si alguna vez ha utilizado PowerShell Direct en un entorno Hyper-V, esta será una experiencia similar.

En lugar de crear una sesión de comunicación remota de PowerShell o usar el cmdlet Invoke-Command a través de la red, el cmdlet Invoke-VMScript puede enviar comandos directamente a la máquina virtual sin conectividad WinRM o SSH normal.

Como ejemplo, tal vez desee realizar una simple lista de directorios en una máquina virtual llamada exchange1. Para ello, debe pasar dir C:\ como valor para el parámetro ScriptText como se muestra a continuación.

PS51> Invoke-VMScript -VM exchange1 -ScriptText "dir C:\"

Los resultados son como si hubiera ejecutado los comandos desde la consola de la máquina virtual en sí. Invoke-VMScript luego transmite toda la salida que devuelve el comando que se ejecutó en la máquina virtual.

Invoke-VMScript
Invoke-VMScript

si bien este es un ejemplo básico, usted puede conseguir tan complicado como usted quisiera. Este cmdlet PowerCLI permite especificar tipos por lotes, PowerShell o Bash dentro del parámetro ScriptText.

También puedes ser más avanzado. A continuación, puede ver cómo usar Invoke-VMScript para ejecutar código de PowerShell utilizando una variable $script para la entrada de parámetro ScriptText. Esto nos permite crear entradas de script más personalizadas para que la máquina virtual procese.

PS51> $script = 'Get-Disk'$guestCredential = Get-CredentialInvoke-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential -ScriptType Powershell

El ScriptText valor del parámetro necesita una cadena. Esta es la razón por la que la variable $script tiene las comillas externas simples como una necesidad.

Es posible que también haya notado el uso del parámetro GuestCredential. Este parámetro se utiliza para autenticarse en el sistema operativo de la máquina virtual. Este parámetro es especialmente útil si desea ejecutar el script como una cuenta diferente.

Su script en acción debería tener un resultado similar al que se muestra a continuación.

Ejecutar un script en una máquina virtual con Invoke-VMScript
Ejecutar un script en una máquina virtual con Invoke-VMScript

El resultado de este script proporciona con la información del disco de la máquina virtual. En base a eso, debe saber que es una máquina virtual remota debido a que VMware Virtual Disk es el nombre descriptivo de la unidad.

Avanzado con Get-View

Es posible que haya visto que algunos de los cmdlets básicos devuelven una propiedad llamada ExtensionData. Puede encontrar esta propiedad canalizando muchos cmdlets PowerCLI al cmdlet PowerShell Get-Member. Si te preguntabas qué era, ahora es tu oportunidad de averiguarlo.

El siguiente paso en esta empresa es comprender el cmdlet Get-View. VMware PowerCLI aprovecha muchas consultas diferentes a la máquina virtual para proporcionar la salida bonita y sencilla de Get-VM. Pero hay mucho bajo el capó al que solo se puede acceder mediante el cmdlet Get-View.

Es probable que vea muchos scripts usando este cmdlet. Le convendría pasar algún tiempo acostumbrándose a ver este cmdlet en acción. Para familiarizarse, use el cmdlet Get-View para obtener información de la máquina virtual (exchange1 en este ejemplo).

Puede ver que las opciones Filter de este cmdlet requieren el uso de una tabla hash de PowerShell y no valores de cadena individuales. Tenga en cuenta al crear sus propios scripts únicos!

PS51> Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}

El resultado del comando anterior es una gran cantidad de información de configuración anidada y opciones de método para realizar acciones contra la máquina virtual o obtener propiedades de objeto.

Get-View
Get-View

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

PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}PS51> $VM.Guest
Usando Get-View con el parámetro de filtro
Usando Get-View con el parámetro de filtro

Quizás le gustaría seleccionar una sola propiedad. Si es así, puede ejecutar lo siguiente para reducir un valor individual.

PS51> $VM.Guest.GuestFullName

Hay muchas opciones Get-View para todos los tipos de objetos VMware. No dude en explorar todas estas opciones y revisar este artículo informativo de VMware que profundiza en este poderoso cmdlet.

Captura de código de VMware: Aprenda de sus clics

Si desea aprovechar PowerCLI pero prefiere no crear código escribiendo, Captura de código en vCenter está aquí para usted. Captura de código es una nueva herramienta para desarrolladores que actúa de manera similar al Centro de administración de Active Directory. Cubramos la captura de código en este tutorial de PowerCLI.

Esta herramienta registra todas las acciones que realice dentro de la interfaz gráfica de usuario. A continuación, transforma todas esas acciones y le proporciona scripts PowerCLI.

De forma predeterminada, la captura de código no está activada. Para activarlo, abra el dispositivo vCenter y vaya a Menú – > Centro de desarrolladores como se muestra a continuación.

Navegar hasta el elemento de menú del Centro de desarrolladores en vSphere
Navegar hasta el elemento de menú del Centro de Desarrolladores en vSphere

Una vez en la pestaña del Centro de Desarrolladores, active Opción de captura de código.

Habilitar la captura de código
Habilitar la captura de código

Cuando habilite la Captura de código, verá un botón de registro rojo dentro del encabezado de vCenter. Una vez habilitada, siempre que desee grabar una acción y convertirla en salida PowerCLI, debe grabar la actividad de la interfaz gráfica pulsando el botón grabar.

Indicador habilitado para captura de código
Indicador habilitado para captura de código

El botón rojo de registro aparecerá junto a la sección de usuario conectado de vCenter para que ahora pueda graba en cualquier momento.

Para demostrar la Captura de código, consulte el asistente para creación de Nuevas Máquinas Virtuales.

  1. Haga clic en el botón Grabar para comenzar a grabar. Esto hará que el botón rojo de grabación comience a pulsar.
  2. Haga clic con el botón secundario en su host de VMware y Cree una Nueva máquina virtual. Ejecute el asistente resultante creando una nueva máquina virtual con todos los valores predeterminados.
  3. Una vez creada la máquina virtual, haga clic en el botón grabar y detenga la grabación.

La salida resultante puede ser un poco más detallada de lo previsto. La salida incluso incluye todas las acciones de navegación por la interfaz gráfica de usuario antes de crear la máquina virtual. Pero debería ver una sección denotada en los comentarios que comienza con CreateVM_Task. Aquí es donde el código comienza a crear una máquina virtual.

A continuación se muestra una parte de la salida CreateVM_Task del nuevo proceso del Asistente de Máquina virtual en la GUI a través de Captura de código:

Código generado del Centro de desarrolladores
Código generado del centro de desarrolladores

Esta salida puede ser un poco abrumadora, pero le expone directamente a la cantidad de opciones de configuración disponibles para sus máquinas virtuales. Dependiendo de sus propias necesidades, ahora está facultado para hacer ajustes en sus propios scripts y personalizarlos según el contenido de su corazón.

La utilidad de captura de código no se limita solo a la creación de máquinas virtuales. También puede crear código para cambios de red, pequeñas modificaciones de máquinas virtuales o cambios de configuración de host. Al poder revisar la salida PowerCLI de las acciones de la interfaz gráfica de usuario, puede tomar un atajo en su viaje a la infraestructura implementada como código.

Resumen del tutorial de PowerCLI

En este artículo, cubriste mucho terreno. Buen trabajo! Espero que se haya dado cuenta de la potencia 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 unos pocos aquí. ¡Asegúrate de estar atento a este blog para obtener más artículos sobre esta increíble herramienta!

Leer Más

  • Cómo Descargar e Instalar PowerCLI
  • Oficial de VMware PowerCLI docs

Deja una respuesta

Tu dirección de correo electrónico no será publicada.