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
1 2 3 4 5 6 | 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 |
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.
what cli version are you using and vcenter version etc?