Por fin he decidido a probar el ToolKit para PowerShell de VMWare. Una extensión que permite, desde PowerShell administrar nuestra infraestructura virtual mediante comandos centralizados. Lo veo muy últil para poder fabricar algunos scripts en PowerShell para realizar ciertas tareas de revisión, ciertamente tediosas, que todo profesional de las TI debe realizar durante su existencia en la tierra de los vivos. Ahora pienso en un sistema de balanceo de LUNs entre tarjetas iSCSI, o Fibre Channel, o consulta de parches instalados en los Hosts ESX, versión de Service Console, VM's arrancadas, estadísticas varias, etc... Una puerta de garaje para los más entusiastas de los comandos (colectivo en el que me atrevería a decir, me incluyo).
Podemos descargar el ToolKit desde www.vmware.com/go/powershell
A fecha de hoy, han aparecido tres versiones:
04-Sep-2008 - VI ToolKit 1.0 Update 1. La primera versión, para Windows.
27-Ene-2009 - VI Toolkit 1.5. Primera versión y media para Windows.
21-May-2009 - vSphere PowerCLI 4.0. Aprovechando la nueva versión de VI 4, vSphere, VMware ha publicado la nueva versión del ToolKit, compatible con VI3 entre otros. Eso sí, le han cambiado el nombre. Ahora la llamaremos vSphere PowerCLI
Para futuras versiones podéis consultar la URL http://www.vmware.com/support/developer/windowstoolkit/
Cabe decir que en mi caso he probado esta última versión, en una infraestructura 3.5 sin problemas, con posibilidad de conexión a host y a Virtual Center. La diferencia, lo de siempre, desde Virtual Center las consultas pueden hacerse en toda la infraestructura virtual y desde el host pues, eso, en ese anfitrión.
Primer pasos:
Connect-VIServer -Server <NombreServidor> -Password <Contraseña>
En <NombreServidor> configuraremos el hostname del nuestro host a administrar o el hostname de nuestro servidor Virtual Centerl.
En <Contraseña>, configuraremos, en el caso de querer acceder a la administración de un host en particular, su contraseña root y en caso de intentar acceder al Virtual Center, la contraseña de nuestro usuario, autenticado y con permisos sobre el Virtual Center.
get-vmhost
Por ejemplo nos devolverá, un par de hosts, en mi caso:
Name State Id
Alfanumerico1 Connected HostSys...
Alfanumerico2 Connected HostSys...
Podemos utilizar pipes para enlazar resultados con otros comandos. Biennnnn! Por ejemplo, si queremos ver las Máquinas Virtuales ubicadas en un determinado host, por ejemplo en mi caso en mi host con nombre "Alfanumerico2" ejecutaríamos:
get-vmhost Alfanumerico2 | get-vm
Y nos devolverá, en mi caso las VMs de ese host:
Name PowerState Num CPUs Memory (MB)
VM1 PoweredOff 4 4800
VM2 PoweredOn 4 4096
VM3 PoweredOn 4 4096
Observamos que por defecto nos dice el número de vCPUs, Memoria asignada, nombre de la Máquina Virtual y el estado que se encuentra.
get-cluster
Y como resultado, en mi caso:
Name HAEnabled HAFailover DrsEnabled DrsAutomationLe
Level vel
ClusterPruebasAlfa01 True 1 True FullyAutomated
ClusterPruebasBeta01 True 1 True FullyAutomated
ClusterProduccion001 True 1 True Manual
Observamos que en mis clusters aparece si tenemos HA activado (Alta Disponibilidad), el nivel de FailOver de HA, si DRS se encuentra activado y qué tipo de automatización en el movimiento de Máquinas Virtuales está configurado. Una maravilla, vaya.
Esto es muy sencillo, pero con la potencia de PowerShell (aunque un poco lento en mostrar los datos), podemos por ejemplo hacer otro tipo de consultas:
$FullName = @{ Label = "Product Full Name"; Expression = { (Get-View $_.ID).Config.Product.fullname } }
Get-VMHost | ft name,$fullname
Name Product Full Name
Alfanumerico1 VMware ESX Server 3.5.0 build-110268
Alfanumerico2 VMware ESX Server 3.5.0 build-110268
Ahora sí será necesario crear un Script para PowerShell, ya que la consulta es algo más compleja. Guardaríamos la consulta en un fichero ps1 y podríamos ejecutarlo de la forma habitual con PowerShell.
$calcVMHost = @{ N = "VMHostName"; E = { (Get-VMHost -VM $_).Name } }
$calcNetwork = @{ N = "NetworkName"; E = { (Get-NetworkAdapter -VM $_).NetworkName } }
Get-VM | Select-Object Name, $calcVMHost, $calcNetwork
Name VMHostName NetworkName
VM1 Alfanumerico2 RedSalida1
VM2 Alfanumerico2 RedPruebas
VM3 Alfanumerico2 RedSalida2
VMA Alfanumerico1 RedPRoducc
En definitiva, podemos realizar bastantes consultas interesantes. No sólo consultas, también podemos administrar la Infraestructura Virtual, pero eso será en otro post.