I get the following error after adding your last mod.
Get-Stat : Cannot validate argument on parameter 'Finish'. The argument is null
or empty. Supply an argument that is not null or empty and then try the comman
d again.
At C:\Windows\System32\WindowsPowerShell\v1.0\VMwareReportscripts7.ps1:11 char:
67
+ $stats = Get-Stat -Entity $vm -Stat $stat -Start $dayStart -Finish <<<< $day
End
+ CategoryInfo : InvalidData: (:) [Get-Stat], ParameterBindingVal
idationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,VMware.VimAutom
ation.ViCore.Cmdlets.Commands.GetViStats
-----------------------------------------------
This is what my current script looks like. First line deleted...
$vm = Get-VM | where {$_.PowerState -eq "PoweredOn"}
Write-Output "VMs found $($vm.Count)"
$dayStart = Get-Date
$dayEnd = $dayEnd.AddDays(-7)
Write-Output "From $dayStart"
Write-Output "To $dayEnd"
$stat = 'cpu.usage.average','mem.usage.average'
$stats = Get-Stat -Entity $vm -Stat $stat -Start $dayStart -Finish $dayEnd
$report = $stats | Group-Object -Property {$_.Entity.Name} | %{
New-Object PSObject -Property @{
VM = $_.Name
ESX = $_.Group[0].Entity.Name
Cluster = Get-Cluster -VM $_.Group[0].Entity | Select -ExpandProperty Name
CPUavg = $_.Group | Where {$_.MetricID -eq 'cpu.usage.average'} | Measure-Object -Property Value -Average | Select -ExpandProperty Average
Memavg = $_.Group | Where {$_.MetricID -eq 'mem.usage.average'} | Measure-Object -Property Value -Average | Select -ExpandProperty Average
}
}
$report | Select VM,CPUavg,Memavg |
Export-Csv "C:\report.csv" -NoTypeInformation -UseCulture