Manipulando CDs con PowerCLI – Parte II
Hola amigos, soy Florián Murillo y aquí estoy con la segunda parte de “nuestros primeros scripts en PowerCLI” y como ya os adelanté en la primera parte, vamos a automatizar el desmontaje de los CDs de las VM, con un pequeño script, evitando errores en vMotion.
Os adjunto el programa completo, fijaros que con @() definimos una tabla de objetos :
add-pssnapin «vmware.vimautomation.core»
connect-viserver -server
$todasVMpowerON = @()
$todasVMpowerON = crearListaVMencendidas
imprimirVMencendidas
imprimirVMconCD $todasVMpowerON
desmontarCDenVM $todasVMpowerON
imprimirVMconCD $todasVMpowerON
Opss se me olvidaba comentaros que aprovecharemos para incorporar el concepto de funciones en nuestros scripts, como os habeis imaginado “crear”, “imprimir” y “desmontar” no son inicios de comandos de PowerCLI, os adjunto las funciones :
La función crearListaVMencendidas crea una lista de VM encendidas (esta información nos la proporciona la propiedad .PowerState) y la almacenamos en $todasVMpowerON
function crearListaVMencendidas {
$aux = get-vm | where {$_.PowerState -eq «PoweredON»}
return $aux
}
La función imprimirVMencendidas imprime por pantalla la lista de las VM encendidas, para ello hace uso de la función crearListaVMencendidas previamente creada :
function imprimirVMencendidas {
$lista = crearListaVMencendidas
write-output $lista
}
La función imprimirVMconCD imprime por pantalla la lista de las VM encendidas y con CD, para ello hace uso de la tabla de objetos $todasVMpowerON que se la proporcionamos como parámetro :
function imprimirVMconCD ($listaVM) {
foreach($vm in $listaVM){
$linea = «» | select-object nombre, mount
$cd = get-vm -name $vm | get-cddrive
if ($cd.isopath -ne $null) {
$linea.nombre = $vm.name
$t = $cd.isopath
if ($t -ne $NULL) {
$a = $t.split(«/»)
$linea.mount = $a[$a.length-1]
} else {
$linea.mount = «NO CD»
}
$tabla += $linea
}
}
write-output $tabla
}
Algunas aclaraciones sobre la función anterior :
> El comando select-object proporciona propiedades al objeto $linea
> La función split coge el contenido de una cadena y la separa en varias subcadenas utilizando como separador el caracter “/” y depositando el resultado en la tabla $a, su último valor (o sea length – 1) es la imagen.iso montada en el CD
> Si no hay un CD montado aparecerá el mensaje “NO CD” en la columna “mount”
La función desmontarCDenVM revisa las VM encendidas y aquella que tenga CDs montados los desmonta con el comando set-cddrive :
function desmontarCDenVM ($listaVM) {
foreach($maquinaVirtual in $listaVM){
foreach ($cd in $maquinaVirtual.cddrives) {
if ($cd.isopath -ne $null) {
set-cddrive -CD $cd -nomedia -confirm:$false
}
}
}
}
Adjunto el resultado de la ejecución :
> .\miscript.ps1
Name PowerState Num CPUs Memory (MB)
—- ———- ——– ———–
vm01 PoweredOn 2 2048
vm02 PoweredOn 1 1024
vm03 PoweredOn 2 1024
vm04 PoweredOn 1 1024
vm05 PoweredOn 2 1024
vm06 PoweredOn 2 3600
nombre : vm03
mount : openSUSE-11.1-DVD-i586.iso
nombre : vm05
mount : ubuntu-9.10-desktop-i386.iso
(tras el desmontaje)
IsoPath :
HostDevice :
RemoteDevice :
ParentId : VirtualMachine-vm-677
ConnectionState : VMware.VimAutomation.Client20.ConnectInfoImpl
Id : VirtualMachine-vm-677/3000
Name : CD/DVD Drive 1
IsoPath :
HostDevice :
RemoteDevice :
ParentId : VirtualMachine-vm-670
ConnectionState : VMware.VimAutomation.Client20.ConnectInfoImpl
Id : VirtualMachine-vm-670/3000
Name : CD/DVD Drive 1
Por favor, si te ha gustado este post dame tu puntuacion: [ratings]