PowerCLI one-liners: Máquinas virtuales sin VMware Tools

Contents

Si hay algo que caracteriza a PowerShell (y PowerCLI) es la capacidad de realizar acciones aparentemente complejas en otros lenguajes de programación/scripting utilizando muy pocos carácteres. Es por ello que iniciamos la sección “PowerCLI one-liners” en la que iremos viendo utilidades de todo tipo con algo en común: que se pueden ejecutar en una sola línea. En la primera entrega vamos a ver como a listar máquinas virtuales sin VMware Tools.

Si tenemos algo de experiencia utilizando PowerCLI se nos puede pasar por la cabeza lo más obvio: ¿máquinas virtuales sin VMware Tools? Fácil, listo las VMs con Get-VM y a partir de ahí me las apaño para buscar alguna propiedad que indique si están instaladas. El gran problema de ésto es que no existe dicha propiedad, por lo que **tendremos que tirar de Get-View para la tarea **(o de la propiedad ExtensionData que realmente accede a un objeto con las propiedades de Get-View desde Get-VM).

** Get-View** es un CMDlet que nos devuelve un objeto “vSphere .Net View” al contrario que Get-VM que nos devuelve un objeto “PowerShell VIObject”. Para esta entrada la diferencia que nos interesa es que con Get-View sacámos un objeto con 147 métodos y propiedades, y con Get-VM sacámos un objeto con “sólo” 41, y de entre esos 147 métodos y propiedades de Get-View está el estado de las VMware Tools.

Después de esta pequeña intro sobre la diferencia entre Get-View y Get-VM vamos a lo que toca, éste es el one-liner y la descomposición del mismo:

1
Get-View -ViewType VirtualMachine | Select-Object Name, @{ Name="VersionTools"; Expression={$_.config.tools.toolsVersion}} | Where-Object {$_.VersionTools -eq 0}
  • Get-View -ViewType VirtualMachine: Listamos todas las VM’s de nuestro Datacenter.
  • Select-Object Name, @{ Name=“VersionTools”; Expression={$_.config.tools.toolsVersion}}: Seleccionamos la propiedad “Name” y una propiedad a la que llamamos “VersionTools” con el número de versión de las VMware Tools.
  • Where-Object {$_.VersionTools -eq 0}: Filtramos sólo las VM’s que tengan versión “0”, es decir, que no tienen las tools instaladas.

Después de ejecutarlo deberíamos ver algo similar a esto:

/wp-content/uploads/2018/04/VMs_Notools.png
Máquinas virtuales sin VMware Tools

Una tarea muy sencilla que podemos programar y con la que obtendremos más control sobre nuestra infraestructura.