LucD
Leadership
Leadership

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

View solution in original post