Dernière version de mon script powercli d’inventaire de VMs avec plusieurs optimisations récupérées sur le forum VMware principalement :
$vCenter = Read-Host "Entrer ici le nom ou l'ip du vCenter"
Connect-VIServer $vCenter
#Creation du dossier pour l'export
md "C:\Scripts" -ErrorAction SilentlyContinue
#Inventaire VMs
Get-View -ViewType VirtualMachine -Property Name, Guest, Parent, Summary, Config, Runtime |
select Name,
@{N='VMHostname';E={$_.Guest.Hostname}},
#set variable parent puis remmonte d'un cran avec $parent.parent tant que le moref n'est pas datacenter
@{N='Datacenter';E={
$parent = Get-View -Id $_.Parent -Property Name,Parent
Do {$parent = Get-View -Id $parent.Parent -Property Name,Parent }
while ($parent.MoRef.Type -ne "DataCenter" -and $parent), $parent.name}},
@{N='PowerState';E={$_.Summary.Runtime.PowerState}},
@{N='OS';E={$_.Config.GuestFullName}},
#Ancienne affichage IP
#@{N='IP';E={$_.Guest.IPAddress}}
#avantage de Net.IPAddress donne toutes les IPs | where -filtertype {$_ est inférieur à 'a')
#affichage IPV4 seulement (en mode call de methode where)
@{N='IP';E={$_.Guest.Net.IPAddress.where{$_ -notlike "*fe80*"}}},
@{N='MacAddress';E={$_.Guest.Net.MacAddress}},
@{N='NetworkName';E={$_.Guest.Net.Network}},
@{N='VMToolsStatus';E={$_.Guest.ToolsStatus}},
# use UpdateViewData() to populate the linked view, then access said linked view
@{N='Cluster';E={$_.UpdateViewData("Runtime.host.parent.name"), $_.Runtime.LinkedView.Host.LinkedView.Parent.Name}},
@{N='vCPU';E={$_.Summary.Config.NumCpu}},
@{N='vRAM';E={$_.Summary.Config.MemorySizeMB}},
#le premier split prend la premiere expression, le deuxieme retire les crochets, le [1] selectionne la premiere valeur car c'est un tableau
@{N='Datastore';E={$_.Summary.Config.VmPathName.Split()[0].split("[]")[1]}},
#formule mathematique [math]::round(valeur entre parentheses) puis division ou autre c'est bien de mettre 1GB il fait directement 1024 puis le chiffre après la virgule correspond au nombre de decimal
@{N='DiskGB';E={[Math]::Round((($_.Guest.Disk | Measure-Object -Property Capacity -Sum).Sum / 1GB),0)}},
@{N='DiskFree';E={[Math]::Round((($_.Guest.Disk | Measure-Object -Property FreeSpace -Sum).Sum / 1GB),0)}} |
Export-csv -NoTypeInformation -encoding "unicode" -append "C:\Scripts\export-VMs.csv"
Voici le résultat dans Excel:

