¡Buenas!
En la entrada de hoy veremos como realizar, mediante scripting de powershell con modulos de PowerCli, un report en Excel con varios ítems referentes a las VMs que alojamos en nuestros nodos y/o vCenter.
Antes de nada, agradecer a mi compañero de milicia @JotaCee (www.martinezmartinez.eu) por pelearse con el script y decidir solicitarme ayuda para pulit el código y obtener lo que más necesitábamos de este código.
Para ello, lo primero que tenemos que tener claro es que debemos poseer Powercli en el equipo donde vayamos a lanzar el script.
Una vez que tenemos powercli, ¡es hora de ponernos manos a la obra!
cd 'C:\Program Files (x86)\VMware\Infrastructure\PowerCLI\Scripts\' .\Initialize-PowerCLIEnvironment.ps1 #realizamos la conexion con el nodo o con VCenter como es mi caso (con el nodo usuario root) Connect-VIServer XXX.XXX.XXX.XXX -user (user ESXi/vCenter) -password (la que corresponda) #Metemos todo en un array vacio $report = @() #puntero para ver si entramos en el bucle opcional $i= 0 #recorremos nuestras vm con el listado que sacamos del get-vm foreach($vm in (Get-VM)){ $i= $i + 1 $discos = $VM.Guest.Disks # Array para los VMDK $discoVM = @(Get-HardDisk -VM $vm) #variable para recorrer el Array $k = 0 # recorremos discos por vm foreach ($Disk in $discos){ # cabecera del Excel $row = “” | Select Fecha,Hora,Hostname, VM, GuestName, IP, Datastore, VMXpath, HardDisk, Unidad, CapacityGB, DiskFreespace, ProvisionType, espaciolibre #contenido de informacion de las celdas $row.Fecha = get-date -Format d $row.Hora = Get-Date -UFormat %r $row.Hostname = $vm.VMHost.Name #Etiqueta maquina la que aparece en el inventario $row.VM = $VM.Name #nombre maquina $row.GuestName = $vm.Guest.HostName $row.IP = ($vm.Guest.IPAddress | Out-String).Trim() # Cogemos el valor de IP y lo convertimos a String $row.Datastore = $discoVM[$k].Filename.Split(“]”)[0].TrimStart(“[“) $row.VMXpath = $discoVM[$k].FileName $row.HardDisk = $discoVM[$k].Name $row.Unidad = $disk.Path $row.CapacityGB = [math]::Round(($Disk.CapacityGB),2) $row.DiskFreespace = [math]::Round(($Disk.FreeSpaceGB),2) $row.ProvisionType = $discoVM[$k].StorageFormat $estadodisco = [math]::Round((100*($row.DiskFreespace))/$row.CapacityGB) #Hacemos una condicion para que si el espacio libre es menor al 10% nos printe en la casilla del excel un aviso, si no pues unicamente el % if ($estadodisco -lt 10) { $row.espaciolibre = “Warning ” + $estadodisco + ” %” } else { $row.espaciolibre = “” + $estadodisco + ” %”} if ($discoVM.Count -gt “1”) { $k=$k+1} else {$k=0} $k $report += $row #$i } } $report | Export-Csv -Path C:\Report.csv -NoTypeInformation -UseCulture -Append cls