Try this adapted version
$start=(Get-Date).AddDays(-9)
$finish= (Get-date).adddays(-2)
$stat="cpu.usagemhz.average","mem.active.average","datastore.numberReadAveraged.average"
Get-VIEventPlus-start$start-finish$finish|
Where-Object {"VmCreatedEvent","VmClonedEvent","VmDeployedEvent"-contains$_.Gettype().Name} |%{
Try {
$vm=Get-VM-Id$_.Vm.VM-ErrorActionStop
$evtThisNewVMEvent=$_
}
Catch {
return
}
$statistics=Get-Stat-Entity$vm-Start$start-Finish$finish-Stat$stats
$vm|Select@{N="VM Name";E={$_.name}},
@{N="vCPU Count";E={$_.NumCPU}},
@{N="createdTime";E={$evtThisNewVMEvent.createdTime}},
@{N="Created By";E={$evtThisNewVMEvent.UserName}},
@{N="AvgReadIOPS";E={
[math]::round((($statistics|Where {$_.MetricId-eq"datastore.numberReadAveraged.average"} |
Measure-Object-PropertyValue-Average|Select-ExpandValueAverage)/$statistics[0].IntervalSecs),1)}},
@{N="AvgMemoryUsedMB";E={
[math]::Round((($statistics|Where {$_.MetricId-eq"mem.active.average"} |
Measure-Object-PropertyValue-Average|Select-ExpandPropertyAverage)/1KB),1)}},
@{N="AvgCPUUsedMHz";E={
[math]::Round(($statistics|Where {$_.MetricId-eq"cpu.usagemhz.average"-and$_.Instance-eq''} |
Measure-Object-PropertyValue-Average|Select-ExpandPropertyAverage))}}
}
It reduces the number of Get-Stat calls to 1 instead of 3.
It also contains some updates to the 3 values you calculate from the metrics.










