You could do something like this
# Connect to all the vCenters
Connect-VIServer -Server 'vc1', 'vc2', 'vc3' -User 'xxx' -Password 'yyy'
foreach ($vc in $global:defaultVIServers) {
$ca = Get-CustomAttribute -Name 'Host.License' -Server $vc
Get-Cluster -Name "vc-mix-*" -Server $vc -PipelineVariable cluster |
ForEach-Object -Process {
$esx = Get-VMHost -Location $cluster | Where-Object { (Get-Annotation -Entity $_ -CustomAttribute $ca).Value -eq 'Microsoft' }
$vm = Get-VM -Location $esx
$stats = Get-Stat -Entity $vm -Stat 'cpu.usagemhz.average', 'mem.consumed.average' -Realtime -MaxSamples 1 -Instance '' -ErrorAction SilentlyContinue
New-Object -TypeName PSObject -Property ([ordered]@{
vCenter = $vc.Name
Cluster = $cluster.Name
VMHost = $esx.Name -join '|'
VMHostTotalCpuMhz = ($esx | Measure-Object -Property CpuTotalMhz -Sum).Sum
VMHostTotalCpuMhzUsed = ($esx | Measure-Object -Property CpuUsageMhz -Sum).Sum
VMHostTotalMemGb = ($esx | Measure-Object -Property MemoryTotalGB -Sum).Sum
VMHostTotalMemGbUsed = ($esx | Measure-Object -Property MemoryUsageGB -Sum).Sum
VMCount = $vm.Count
VMTotalCpuMhzUsed = ($stats | Where-Object { $_.MetricId -eq 'cpu.usagemhz.average' } | Measure-Object -Property Value -Sum).Sum
VMTotalMemMbUsed = [math]::Round(( $stats | Where-Object { $_.MetricId -eq 'mem.consumed.average' } | Measure-Object -Property Value -Sum).Sum / 1KB, 1)
})
}
}
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference