Script: How to check VM Average CPU, Memory and Disk Usage VMware Using Powershell or PowerCLI – VirtuallyThatGuy

This is a quick post on how to check the average usage of a VM CPU, Memory and Disk using a powershell or powercli.

Average CPU, Memory, Network and Disk usage

 

Get-Cluster​​ |​​ Get-VM​​ |​​ Where-Object {$_.PowerState​​ -eq​​ "PoweredOn"}​​ |​​ Select​​ Name,  VMHost,​​ NumCpu,​​ MemoryGB,​​ `

@{N="CPU Usage (Average), Mhz"​​ ; E={[Math]::Round((($_​​ |​​ Get-Stat​​ -Stat​​ cpu.usagemhz.average​​ -Start​​ (Get-Date).AddDays(-30)​​ -IntervalMins​​ 5​​ |​​ Measure-Object​​ Value​​ -Average).Average),2)}},​​ `

@{N="Memory Usage (Average), %"​​ ; E={[Math]::Round((($_​​ |​​ Get-Stat​​ -Stat​​ mem.usage.average​​ -Start​​ (Get-Date).AddDays(-30)​​ -IntervalMins​​ 5​​ |​​ Measure-Object​​ Value​​ -Average).Average),2)}}​​ ,​​ `

@{N="Network Usage (Average), KBps"​​ ; E={[Math]::Round((($_​​ |​​ Get-Stat​​ -Stat​​ net.usage.average​​ -Start​​ (Get-Date).AddDays(-30)​​ -IntervalMins​​ 5​​ |​​ Measure-Object​​ Value​​ -Average).Average),2)}}​​ ,​​ `

@{N="Disk Usage (Average), KBps"​​ ; E={[Math]::Round((($_​​ |​​ Get-Stat​​ -Stat​​ disk.usage.average​​ -Start​​ (Get-Date).AddDays(-30)​​ -IntervalMins​​ 5​​ |​​ Measure-Object​​ Value​​ -Average).Average),2)}}​​ |`

Export-Csv​​ -Path​​ C:\Scripts\AverageUsage.csv

 

Get-Cluster | Get-VM | Where-Object {$_.PowerState -eq "PoweredOn"} | Select Name,  VMHost, NumCpu, MemoryGB, `
@{N="CPU Usage (Average), Mhz" ; E={[Math]::Round((($_ | Get-Stat -Stat cpu.usagemhz.average -Start (Get-Date).AddDays(-30) -IntervalMins 5 | Measure-Object Value -Average).Average),2)}}, `
@{N="Memory Usage (Average), %" ; E={[Math]::Round((($_ | Get-Stat -Stat mem.usage.average -Start (Get-Date).AddDays(-30) -IntervalMins 5 | Measure-Object Value -Average).Average),2)}} , `
@{N="Network Usage (Average), KBps" ; E={[Math]::Round((($_ | Get-Stat -Stat net.usage.average -Start (Get-Date).AddDays(-30) -IntervalMins 5 | Measure-Object Value -Average).Average),2)}} , `
@{N="Disk Usage (Average), KBps" ; E={[Math]::Round((($_ | Get-Stat -Stat disk.usage.average -Start (Get-Date).AddDays(-30) -IntervalMins 5 | Measure-Object Value -Average).Average),2)}} |`
Export-Csv -Path C:\Scripts\AverageUsage.csv

You May Also Like

About the Author: VirtuallyThatGuy

2 Comments

  1. I don’t think this is actually working as intended. If you change the (Get-Date).AddDays(-30) to any number even -365 it still returns the same result.

Leave a Reply

Your email address will not be published. Required fields are marked *