# Ensure you're connected to vCenter
Connect-VIServer -Server "your_vcenter_server"
# Create an array to hold disk info
$diskReport = @()
# Get all VMs
$vms = Get-VM
# Iterate through each VM
foreach ($vm in $vms) {
Write-Host "VM: $($vm.Name)"
# Get hard disks attached to the VM
$hardDisks = Get-HardDisk -VM $vm
foreach ($disk in $hardDisks) {
# Get disk drive letter and free space
$diskDrive = Get-VMGuestDisk -VM $vm | Where-Object { $_.MountPoint -eq $disk.Name }
# Disk details
$diskName = $diskDrive.MountPoint
$diskCapacity = [math]::round($disk.CapacityKB / 1MB, 2) # Capacity in MB
$diskFreeSpace = [math]::round($diskDrive.FreeSpaceMB, 2) # Free space in MB
# Create an object for each disk and add to the array
$diskReport += [PSCustomObject]@{
VMName = $vm.Name
DiskName = $diskName
DiskCapacity = $diskCapacity
DiskFreeSpace = $diskFreeSpace
}
Write-Host " Disk Name: $diskName"
Write-Host " Capacity (MB): $diskCapacity"
Write-Host " Free Space (MB): $diskFreeSpace"
}
Write-Host ""
}
# Export the report to a CSV file
$csvPath = "C:\path_to_save\VM_Disk_Report.csv"
$diskReport | Export-Csv -Path $csvPath -NoTypeInformation
# Confirm export
Write-Host "Disk report exported to: $csvPath"
# Disconnect from vCenter
Disconnect-VIServer -Server "your_vcenter_server" -Confirm:$false