0

vCenter for hosts からパフォーマンス データを収集しようとしています。このpowershellスクリプトを作成しました。機能しますが、完了するまでに非常に長い時間がかかります。vCenters からデータを取得するより効率的な方法はありますか。

Connect-VIServer "vcenter.server.com" -User user123 -Password testpassword
$allvms = @()
$allhosts = @()
$hosts = Get-VMHost
$vms = Get-Vm

foreach($vmHost in $hosts){
  $hoststat = "" | Select HostName, MemMax, MemAvg, MemMin, CPUMax, CPUAvg, CPUMin
  $hoststat.HostName = $vmHost.name

  $statcpu = Get-Stat -Entity ($vmHost)-start (get-date).AddDays(-1) -Finish (Get-Date)-MaxSamples 10 -stat cpu.usage.average
  $statmem = Get-Stat -Entity ($vmHost)-start (get-date).AddDays(-1) -Finish (Get-Date)-MaxSamples 10 -stat mem.usage.average

  $cpu = $statcpu | Measure-Object -Property value -Average -Maximum -Minimum
  $mem = $statmem | Measure-Object -Property value -Average -Maximum -Minimum

  $hoststat.CPUMax = $cpu.Maximum
  $hoststat.CPUAvg = $cpu.Average
  $hoststat.CPUMin = $cpu.Minimum
  $hoststat.MemMax = $mem.Maximum
  $hoststat.MemAvg = $mem.Average
  $hoststat.MemMin = $mem.Minimum
  $allhosts += $hoststat
}
$allhosts | Select HostName, MemMax, MemAvg, MemMin, CPUMax, CPUAvg, CPUMin | Export-Csv "c:\output\Hosts.csv" -noTypeInformation
4

2 に答える 2

1

次のように、1 回の get-stat 呼び出しで複数のホスト エンティティから複数のメトリックを収集できます。

get-stat -Entity $hosts -MaxSamples 10 -Stat "cpu.usage.average","mem.usage.average"

次にGroup-Object、結果を解析するために使用します。ここにあるLucD の投稿が参考になるかもしれません。

$vms = Get-Vmあなたが投稿したコードはそれを参照していないので、必要なのだろうか。

PS セッションは、vcenter db と同じ LAN 上にある必要があります。kb.vmware.com/kb/2007388も参照してください。

于 2014-08-20T22:13:18.713 に答える