Hi everyone,
I am trying to figure out to get a storage report for each VM in the environment. Since all the VMs are located on the SAN. I am trying to gather, Total VM harddisk size + Total Snapshot Size + VM page file size (.vswp file).
I am hoping that would give total SAN usage for a given VM? is that right assumption or am I missing something else?
Is there any sample script that i can start with?
Thank you.
Have a look at my yadr – A vdisk reporter post.
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Thank you LucD.
I come up (modified) with another script;
# VMware VirtualCenter Information #
####################################
$vcserver="localhost"
Add-PSsnapin VMware.VimAutomation.Core
connect-VIServer $vcserver
#############
# CSV File Variables #
#############
$filelocation="C:\temp\VMStorageReport.csv"
$response_file = @()
#############################
# Get-VM Information #
#############################
Get-VM | `
ForEach-Object {
$VM = $_
$VMview = $VM | Get-View
$VMResourceConfiguration = $VM | Get-VMResourceConfiguration
#Calculate VM Hard Disk
$VMHardDisks = $VM | Get-HardDisk
$HardDisksSizesMB = @()
$Temp = $VMHardDisks | ForEach-Object { $HardDisksSizesMB += [Math]::Round($_.CapacityKB/1024) }
$VmdkSizeMB = ""
$Temp = $HardDisksSizesMB | ForEach-Object { $VmdkSizeMB += "$_+" }
$VmdkSizeMB = $VmdkSizeMB.TrimEnd("+")
$TotalHardDisksSizeMB = 0
$Temp = $HardDisksSizesMB | ForEach-Object { $TotalHardDisksSizeMB += $_ }
#Calculate VM Snapshot Size
$Snapshots = $VM | Get-Snapshot
$SnapshotSizesMB = @()
$Temps = $Snapshots | forEach-Object { $SnapshotSizesMB += [Math]::Round($_.SizeMB) }
$SnapSizeMB = ""
$Temps = $SnapshotSizesMB | ForEach-Object { $SnapSizeMB += "$_+" }
$SnapSizeMB = $SnapSizeMB.TrimEnd("+")
$TotalSnapshotSizeMB = 0
$Temps = $SnapshotSizesMB | ForEach-Object { $TotalSnapshotSizeMB += $_ }
#Get-VM Memory for swap file
$VMMemoryMB = $VM.MemoryMB
#Add 100 MB for Log files for each VM.
$VMLogfileSize = 100MB/1024/1024
$TotalSANSpaceUsedbyVM = $TotalHardDisksSizeMB + $TotalSnapshotSizeMB + $VMLogfilessize + $VMMemoryMB
#Total GB used for VM.
#[math]::Round($TotalSANSpaceUsedbyVM/1024)
$Report = "" | Select-Object VMname,VMDKSizeMB,TotalVMDKSizeMB,SnapshotSizeMB,TotalSnapshotSizeMB,VMSwapFileSizeMB,VMLogfileSizeMB,TotalSANSpaceUsedbyVMMB
$Report.VMName = $VM.name
$Report.VMDKSizeMB = $VmdkSizeMB
$Report.TotalVMDKSizeMB = $TotalHardDisksSizeMB
$Report.SnapshotSizeMB = $SnapSizeMB
$Report.TotalSnapshotSizeMB = $TotalSnapshotSizeMB
$Report.VMSwapFileSizeMB = $VMMemoryMB
$Report.VMLogfileSizeMB = $VMLogfileSize
$Report.TotalSANSpaceUsedbyVMMB = $TotalSANSpaceUsedbyVM
$Response_file += $Report
}
$Response_file | sort -Property VMName | Export-csv "$filelocation" -NoTypeInformation