PowerShell Reporting VMware con powercli
Connect-VIServer 192.168.1.XXX -user administrator@vsphere.local -password XXXX
#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
$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