# VARIABLES $outputFile = 'c:\VMDiskOverview.csv' # Output file path $VCServer = "localhost" # Virtual Center Server # SCRIPT $VC = Connect-VIServer $VCServer # Connect to Virtual Center $myCol = @() # Prepare output collection $VMs = Get-VM | Sort Name # Get all VMs (sorted) $counter = 0 # Initialize counter for progress bar ForEach ($VM in $VMs) # Loop through VMs { $counter++ # Increase counter for progress bar Write-Progress -Activity "Gathering disk information" -Status "Processing VM $VM" -PercentComplete (100*($counter/$VMs.count)) # Display progress bar $VMNetwork = Get-NetworkAdapter -VM $VM # Get VM Network info $VMHost = Get-VMHost -VM $VM # Get this VM's host $VMHostView = $VMHost | Get-View # Get advanced properties of host ForEach ($DISK in $VM.HardDisks) # Loop through VM's harddisks { $myObj = "" | Select VMHost, VM, Disk, Size, Datastore, VLAN # Create output object $myObj.VMHost = $VMHost.Name # ESX Server Name $myObj.VM = $VM.Name # Virtual Machine Name $myObj.Disk = $DISK.Name # Virtual Disk Name $myObj.Size = $DISK.CapacityKB # Virtual Disk Size $myObj.Datastore = $DISK.Filename.Split("[]")[1] # Datastore Name $myObj.VLAN = $VMNetwork.NetworkName # VLAN Name $myCol += $myObj # Add output to collection } } $myCol | Export-Csv $outputFile -NoTypeInformation # Export output to csv Invoke-Item $outputFile # Launch outout file