Script para reportear estado de la configuración de vSphere

Esto es mas como un trabajo en progreso, tengo meses tratando de darme el tiempo para generar un script que me ayude con la información necesaria para hacer la “memoria técnica” de una implementación, porque odio documentar, pero es parte del trabajo, así que…

Este script arroja la info de como está la configuración de red, datastores, VMs. Se que le hace falta info y pulir las salidas, pero lo voy a ir actualizando. Crea varios TXT que se van depositando en una carpeta que lleva como nombre el día que se ejecuta el script.

Está diseñado para que la salida sea como “lista”, pero se puede configurar para que sea una tabla. También con unas pequeñas modificaciones se pueden exportar como csv o como HTML.

La idea también es poder programar la ejecución del script para poder tener a la mano la información actualizada de la configuración de vSphere, y en caso de tener que hacer troubleshooting no tener que recurrir a esa “memoria técnica” en físico y que ya se encuentra desactualizada ¡¡porque se hizo hace años!!

Déjenme un comentario si lo quieren probar y tiene dudas de como echarlo a volar o ideas para mejorarlo 🙂


## Script que genera CSV con informacion de la configuracion de distintos elementos en una
## instalacion de vSphere (5.1/5.5). Pensada en que corra al terminar una instalacion o con
## cierta frecuencia para mantener actualizada la informacion del entorno vSphere.
## Archivos CSV que va a generar el reporte
## -> Reporte de VMs
## -> Reporte de discos virtuales y configuracion
## -> Configuracion de politicas en PortGroups
## -> Configuracion de red en PortGroups
## -> IP y funcionalidades en PortGroups
## -> Datastores VMFS
## -> Datastores NFS
## -> Configuracion host ESXi
## -> Licencias hosts ESXi
## -> Cluster
## -> HostId de los ESXi
## Completar con la informacion de vCenter Server!!
$vCenter = "IP_de_vCenter_Server"
$user = "Usuario_con_derechos_de_administrador_de_vCenter"
$password = "contraseña_usuario_administrador"
## Variables que utizaremos mas tarde
$ok = "Si"
$noresp = "No"
$na ="N/A"
$on = "Encendida"
$off = "Apagada"
$running = "Running"
$current = "guestToolsCurrent"
$unmanaged = "guestToolsUnmanaged"
$noact = "No Actualizado"
$date = Get-Date
$foldername = Get-Date -Format yyMMdd
## Crea el directorio donde se depositaran los TXT
Set-Location -path c:\temp
md -Name $foldername
## Credenciales de vCenter y PS Snapin
Add-PSSnapin -name VMware.VimAutomation.Core
Connect-VIServer -Server $vCenter -User $user -Password $password
## Reporte de VMs
Get-VMHost -Name * | Get-VM |
Select @{Name="VM";E={$_.name}},
@{Name="Nombre DNS";E={$_.guest.hostname}},
@{Name="IP";E={$_.guest.ipaddress[0]}},
@{Name="vCPU";E={$_.numcpu}},
@{Name="Memoria (GB)";E={$_.memorygb}},
@{Name="VMware Tools";E={ if (($_.guest.ExtensionData.Toolsversionstatus -eq $current) -or ($_.guest.ExtensionData.Toolsversionstatus -eq $unmanaged)) { $ok } else { $noact }}},
@{Name="Sistema Operativo";E={$_.ExtensionData.Summary.config.guestfullname}},
@{Name="Estado";E={ if ($_.guest.state -eq $running) { $on } else { $off }}} | Export-Csv c:\temp\$foldername\VMs.csv
Add-Content c:\temp\$foldername\VMs.csv "`r`nReporte generado: $date"
## Reporte de discos virtuales y configuracion
Get-VM * | Get-HardDisk |
Select @{Name="VM";Expression={$_.Parent}},
@{Name="Disco";Expression={$_.name}},
@{Name="Capacidad GB";Expression={"{0:N1}" -f $_.CapacityGB}},
@{Name="Formato";Expression={if ($_.StorageFormat -eq 'Thin') { "Thin" } else { "Thick" }}},
@{Name="RDM";Expression={if ($_.ExtensionData.backing.LunUuid -ne $null) { "Si" } else { "No" }}},
@{Name="Independiente";Expression={if ($_.Persistence -eq 'Persistent') { "No" } else { "Si" }}},
@{Name="Persistente";Expression={if ($_.Persistence -eq 'IndependentPersistent' -or 'Persistent') { "Si" } else { "No" }}},
@{Name="Datastore";Expression={$_.FileName.Split(']')[0].TrimStart('[')}},
@{Name="Folder/VMDK";Expression={$_.filename.Split(']')[1]}} | Export-Csv c:\temp\$foldername\discos.csv
Add-Content c:\temp\$foldername\discos.csv "`r`nReporte generado: $date"
## Configuracion de politicas en PortGroups
Get-VMHost * | Get-VirtualPortGroup |
Select @{Name="Portgroup";E={$_.name}},
@{Name="Promiscuous Mode";E={$_.ExtensionData.ComputedPolicy.security.allowpromiscuous}},
@{Name="Mac Address Changes";E={$_.ExtensionData.ComputedPolicy.security.MacChanges}},
@{Name="Forged Transmits";E={$_.ExtensionData.ComputedPolicy.security.ForgedTransmits}},
@{Name="Host";E={$_.vmhostid}} | Export-Csv c:\temp\$foldername\politicas-sw.csv
Add-Content c:\temp\$foldername\politicas-sw.csv "`r`nReporte generado: $date"
## Configuracion de red en PortGroups
Get-VMHost * | Get-VirtualPortGroup |
Select @{Name="Portgroup";E={$_.name}},
@{Name="Active NIC";E={$_.ExtensionData.ComputedPolicy.nicteaming.nicorder.activenic}},
@{Name="Standby NIC";E={$_.ExtensionData.ComputedPolicy.nicteaming.nicorder.StandbyNic}},
@{Name="Balance Protocol";E={$_.ExtensionData.ComputedPolicy.nicteaming.Policy}},
@{Name="Failback";E={$_.ExtensionData.ComputedPolicy.nicteaming.ReversePolicy}},
@{Name="Notify switch";E={$_.ExtensionData.ComputedPolicy.nicteaming.NotifySwitches}},
@{Name="VLAN";E={$_.VLanId}},
@{Name="Host";E={$_.vmhostid}} | Export-Csv c:\temp\$foldername\conf-PG.csv
Add-Content c:\temp\$foldername\conf-PG.csv "`r`nReporte generado: $date"
## IP y funcionalidades en PortGroups
Get-VMHost * | Get-VMHostNetworkadapter | Where {$_.Name -like "vmk*"} |
Select @{Name="Portgroup";E={$_.PortGroupName}},
@{Name="IP";E={$_.IP}},
@{Name="Netmask";E={$_.SubnetMask}},
@{Name="Management";E={$_.ManagementTrafficEnabled}},
@{Name="vMotion";E={$_.VMotionEnabled}},
@{Name="Fault Tolerance";E={$_.FaultToleranceLoggingEnabled}},
@{Name="Host";E={$_.vmhostid}} | Export-Csv c:\temp\$foldername\conf-IP-vmkernel.csv
Add-Content c:\temp\$foldername\conf-IP-vmkernel.csv "`r`nReporte generado: $date"
## Datastores VMFS
Get-Datastore | where{$_.Type -eq "VMFS"} |
Select @{Name="Datastore";E={$_.Name}},
@{Name="Capacity (GB)";E={$_.capacityGB}},
@{Name="Type";E={$_.Type}},
@{Name="Version";E={$_.FileSystemVersion}},
@{Name="Canonical Name";E={(Get-ScsiLun -datastore $_ | Select -First 1).canonicalname}},
@{Name="URL (Folder)";E={$_.ExtensionData.Summary.Url}},
@{Name="Hosts conectados";E={$_.ExtensionData.Host.Key}}| Export-Csv c:\temp\$foldername\datastores-VMFS.csv
Add-Content c:\temp\$foldername\datastores-VMFS.csv "`r`nReporte generado: $date"
## Datastores NFS
Get-Datastore | where{$_.Type -eq "NFS"} |
Select @{Name="Datastore";E={$_.Name}},
@{Name="Capacity (GB)";E={$_.capacityGB}},
@{Name="Type";E={$_.Type}},
@{Name="NFS Server";E={$_.RemoteHost}},
@{Name="Folder";E={$_.RemotePath}},
@{Name="Hosts conectados";E={$_.ExtensionData.Host.Key}} | Export-Csv c:\temp\$foldername\datastores-NFS.csv
Add-Content c:\temp\$foldername\datastores-NFS.csv "`r`nReporte generado: $date"
## Configuracion host ESXi
Get-VMHost |
Select @{Name="Name";E={$_.Name}},
@{Name="Model";E={$_.Model}},
@{Name="Processor Model";E={$_.ProcessorType}},
@{Name="Cores";E={$_.NumCpu}},
@{Name="Sockets";E={$_.extensiondata.hardware.cpuinfo.numcpupackages}},
@{Name="Total cores";E={$_.ExtensionData.Hardware.CpuInfo.NumCpuCores}},
@{Name="Memory";E={$_.MemoryTotalGB}},
@{Name="Version ESXi";E={$_.Version}},
@{Name="Build";E={$_.Build}} | Export-Csv c:\temp\$foldername\hosts.csv
Add-Content c:\temp\$foldername\hosts.csv "`r`nReporte generado: $date"
## Licencias hosts ESXi
Get-VMHost |
Select @{Name="Name";E={$_.Name}},
@{Name="License Key";E={$_.LicenseKey}} | Export-Csv c:\temp\$foldername\licencias-esx.csv
Add-Content c:\temp\$foldername\licencias-esx.csv "`r`nReporte generado: $date"
## Cluster
Get-Cluster |
Select @{Name="Name";E={$_.Name}},
@{Name="HA Enabled";E={$_.HAEnabled}},
@{Name="DRS Enabled";E={$_.DRSEnabled}} | Export-Csv c:\temp\$foldername\cluster.csv
Add-Content c:\temp\$foldername\cluster.csv "`r`nReporte generado: $date"
## HostId de los ESXi
Get-VMHost | Select Name,Id | Export-Csv c:\temp\$foldername\vmhostId.csv
## Desconectar sesion de vCenter Server
Disconnect-VIServer -Server $vCenter -Force -Confirm:$false

Leave a comment