La PowerCLI se renueva (II)
La semana pasada os hablaba un poco acerca de una de las novedades de vSphere 5, la nueva versión de su Shell de gestión PowerCLI. En el post anterior hacía un pequeño repaso de las recientes incorporaciones a esta versión y comentaba algunos de los nuevos cmdlets y snapins que tenemos ahora disponibles.
Ese mismo post me comprometí con vosotros a entrar un poco más en detalle en algunos de los cmdlets que mencionaba. Y como lo prometido es deuda, aquí vengo con algunos cmdlets después de “destriparlos” un poquito…
– Get-VIProperty: nos permite obtener una propiedad personalizada de objetos vmware.
La opción de crear propiedades personalizadas para objetos de vmware, tipo VirtualMachine, Host o Datastore, no es nueva de la versión 5, ya teníamos esa posibilidad en la PowerCLI 4.1 con los cmdlets New-VIProperty y Remove-VIProperty, sin embargo no teníamos opción sencilla de obtener la definición de esas nuevas propiedades personalizadas. Get-VIProperty nos facilita esta tarea.
La definición de propiedades personalizadas es realmente potente e interesante, y lo suficientemente extensa como para tratarla en un post independiente, por lo que en esta ocasión, y para no extenderme demasiado, voy a dejaros un ejemplo sencillo de uso de las propiedades personalizadas:
Para este ejemplo tomemos las propiedades de un objeto datastore:
PowerCLI C:\>get-datastore Datastore1 | Format-List *
La salida del comando será algo parecido a esto:
FileSystemVersion : 3.46
DatacenterId : Datacenter-ha-datacenter
Datacenter : ha-datacenter
ParentFolderId : Folder-ha-folder-datastore
ParentFolder : datastore
DatastoreBrowserPath : vmstores:\192.168.1.30@443\ha-datacenter\ Datastore1
FreeSpaceMB : 2070576
CapacityMB : 2096896
Accessible : True
Type : VMFS
StorageIOControlEnabled : False
CongestionThresholdMillisecond : 232
Name : Datastore1
ExtensionData : VMware.Vim.Datastore
CapacityGB : 2022,046875
FreeSpaceGB : 2047,75
Id : Datastore-4e4bb645-a7775cb1-71ec-d8d385a17632
Uid : /VIServer=root@192.168.1.30:443/Datastore=Datastore-4e4bb645-a7775cb1-71ec-d8d385a17632/
Supongamos ahora, a modo de ejemplo, que necesitamos saber el número de máquinas virtuales que aloja este datastore. Tenemos la opción de consultar la variable ExtensionData.VM.Length o definirnos nuestra propiedad personalizada para que nos devuelva directamente este dato:
PowerCLI C:\>New-VIProperty –Name NumeroVMs –ObjectType Datastore –Value { param($ds); $ds.ExtensionData.VM.Length }
Si ahora obtenemos de nuevo la lista de propiedades de nuestro datastore, o de cualquier otro, veremos la nueva propiedad recién creada:
NumeroVMs : 14
FileSystemVersion : 3.46
DatacenterId : Datacenter-ha-datacenter
Datacenter : ha-datacenter
ParentFolderId : Folder-ha-folder-datastore
ParentFolder : datastore
DatastoreBrowserPath : vmstores:\192.168.1.30@443\ha-datacenter\ Datastore1
FreeSpaceMB : 2070576
CapacityMB : 2096896
Accessible : True
Type : VMFS
StorageIOControlEnabled : False
CongestionThresholdMillisecond : 232
Name : Datastore1
ExtensionData : VMware.Vim.Datastore
CapacityGB : 2022,046875
FreeSpaceGB : 2047,75
Id : Datastore-4e4bb645-a7775cb1-71ec-d8d385a17632
Uid : /VIServer=root@192.168.1.30:443/Datastore=Datastore-4e4bb645-a7775cb1-71ec-d8d385a17632/
Y después de todo esto… ¿para qué sirve Get-VIProperty? Bien, en su forma más sencilla, es decir, sin parámetros, nos devolverá el listado de todas las propiedades personalizadas, con su correspondiente definición. En nuestro caso, si no nos acordamos de cómo habíamos calculado el valor de una propiedad, ahora podemos saberlo:
PowerCLI C:\> Get-VIProperty –Name NumeroVMs –ObjectType Datastore | Format-List *
Name : NumeroVMs
RetrievingType : Datastore
DeclaringType : Datastore
Value : param($ds)
$ds.ExtensionData.VM.Length
– Copy-VMGuestFile: el nombre es auto-explicativo, copia un fichero o carpeta entre el host y una máquina virtual. Veamos un ejemplo sencillo.
En este ejemplo vamos a copiar la carpeta C:\temp\DEMO, que contiene cinco archivos y que se encuentra en nuestra máquina local a la carpeta C:\DEMO en la máquina virtual VM1.
El contenido de la carpeta DEMO es el siguiente:
Directorio: C:\temp\DEMO
Mode LastWriteTime Length Name
—- ————- —— —-
-a— 09/06/2011 13:07 3425 creds.xml
-a— 04/07/2011 11:11 66093364 cuentas.xml
-a— 19/08/2011 14:25 4066 Dpts.csv
-a— 15/11/2010 10:01 24099 groups.csv
-a— 11/11/2010 17:27 3351 OU.csv
Para realizar la copia ejecutaremos:
PowerCLI C:\>Copy-VMGuestFile –VM (Get-VM VM1) –LocalToGuest –Destination “C:\DEMO” –Source “C:\temp\DEMO” –GuestCredential (Get-Credential)
Donde:
– VM es la máquina virtual con la que queremos interactuar
– LocalToGuest nos indica el sentido de la copia, y por lo tanto la ubicación de los ficheros y directorios indicados por Destination y Source. En este ejemplo, Destination se encuentra en la máquina virtual y Source en el equipo desde el que se lanza el cmdlet.
– GuestCredential indica las credenciales que usaremos para logarnos en la máquina virtual.
Como apunte final a este cmdlet comentaros que hay que lanzar este cmdlet desde la versión de 32bits de PowerCLI y que no funciona para la versión free de ESXi.
Por último recordaros que para que todos estos cmdlets funcionen correctamente tendremos que habernos conectado previamente a nuestro vCenter o host ESXi mediante el cmdlet Connect-VIServer.
¿Crees que este post puede interesar a alguien? En ese caso clica en los botones de compartir de arriba o abajo. Gracias por el apoyo.