VMware Cloud Community
taskino
Enthusiast
Enthusiast

VMStorage Report

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.

Tags (2)
0 Kudos
2 Replies
LucD
Leadership
Leadership

Have a look at my yadr – A vdisk reporter post.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

taskino
Enthusiast
Enthusiast

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
  

0 Kudos