PowerCli: Report discos VMs en vCenter


¡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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos
Responsable Juan José León +info…
Finalidad Gestionar y moderar tus comentarios. +info…
Legitimación Consentimiento del interesado. +info…
Destinatarios No se cederán datos a terceros, salvo obligación legal +info…
Derechos Acceder, rectificar y cancelar los datos, así como otros derechos. +info…
Información adicional Puedes consultar la información adicional y detallada sobre protección de datos en nuestra página de política de privacidad.