# This script saves CSV report on ALL VMs and their disk sizes on the specified VMware cluster # REQUIRED cluster name $Cluster = "Cluster_NAME" # REQUIRED report file name $date = Get-Date -Format "yyyy-MM-dd-HH-mm" $report_file_name = "\VM_Disk_Report-"+$date+".csv" $VMs = Get-Cluster $Cluster | Get-VM | sort host,name # in absence of cluster you can get VMs from datacenter # $VMs = Get-Datacenter | Get-VM | sort host,name # Get-Cluster $Cluster | Get-VM | % {get-harddisk -vm $_.Name} | Out-GridView $path = Split-Path -parent $MyInvocation.MyCommand.Definition $newpath = $path + $report_file_name $Data = @() foreach ($VM in $VMs){ $firstdisk = 1 $VMDKs = $VM | get-HardDisk foreach ($VMDK in $VMDKs) { switch ($firstdisk) { 0 { if ($VMDK -ne $null) { $into = New-Object PSObject Add-Member -InputObject $into -MemberType NoteProperty -Name "Host" "" Add-Member -InputObject $into -MemberType NoteProperty -Name "VM Name" "" Add-Member -InputObject $into -MemberType NoteProperty -Name "vCPU" "" Add-Member -InputObject $into -MemberType NoteProperty -Name "RAM (GB)" "" Add-Member -InputObject $into -MemberType NoteProperty -Name "vDisk Count" "" Add-Member -InputObject $into -MemberType NoteProperty -Name "VMDK File Name" $VMDK.FileName.Split(']')[1].TrimStart('[') Add-Member -InputObject $into -MemberType NoteProperty -Name "Capacity (GB)" ([int64]$VMDK.CapacityKB/1024/1024) Add-Member -InputObject $into -MemberType NoteProperty -Name Datastore $VMDK.FileName.Split(']')[0].TrimStart('[') Add-Member -InputObject $into -MemberType NoteProperty -Name "Disk Type" $VMDK.DiskType Add-Member -InputObject $into -MemberType NoteProperty -Name Persistence $VMDK.Persistence $Data += $into } #end if } # end option 0 1 { if ($VMDK -ne $null) { $into = New-Object PSObject Add-Member -InputObject $into -MemberType NoteProperty -Name "Host" $VM.Host Add-Member -InputObject $into -MemberType NoteProperty -Name "VM Name" $VM.Name Add-Member -InputObject $into -MemberType NoteProperty -Name "vCPU" $VM.NumCpu Add-Member -InputObject $into -MemberType NoteProperty -Name "RAM (GB)" ([int]$VM.MemoryMB/1024) Add-Member -InputObject $into -MemberType NoteProperty -Name "vDisk Count" $VMDKs.Count Add-Member -InputObject $into -MemberType NoteProperty -Name "VMDK File Name" $VMDK.FileName.Split(']')[1].TrimStart('[') Add-Member -InputObject $into -MemberType NoteProperty -Name "Capacity (GB)" ([int64]$VMDK.CapacityKB/1024/1024) Add-Member -InputObject $into -MemberType NoteProperty -Name Datastore $VMDK.FileName.Split(']')[0].TrimStart('[') Add-Member -InputObject $into -MemberType NoteProperty -Name "Disk Type" $VMDK.DiskType Add-Member -InputObject $into -MemberType NoteProperty -Name Persistence $VMDK.Persistence $Data += $into } #end if } # end option 1 } # end switch $firstdisk = 0 } # end for each $VMDK } # end for each $VM #$Data | Sort-Object Datastore,"VMDK File Name","VM Name" | Export-Csv -Path $newpath -NoTypeInformation $Data | Export-Csv -Path $newpath -NoTypeInformation