0

我正在使用用于 linux 的 wmi 客户端。通过它你可以执行WQL来远程查询windows服务器。

例如;

 Select * from Win32_ComputerSystem

我想做的是计算使用的 CPU 百分比。

我一直在从“Win32_PerfFormattedData_Counters_ProcessorInformation”中获取“PercentProcessorTime”的值。我认为这对于具有单个 CPU 的计算机来说工作得很好,但是我不知道如何计算具有多个 CPU 的计算机的 CPU 使用率。

很感谢任何形式的帮助。

干杯。

4

1 回答 1

2

如果你SELECT * FROM Win32_PerfFormattedData_Counters_ProcessorInformation那么你会得到一个结果集的列表。第一组是所有 CPU 的总体值,其余的是各个 CPU 的值。

这段代码显示了这个想法。请注意,您应该替换SYSTEM为您要查询的计算机的名称。

use strict;
use warnings;

use Win32::OLE;
use Win32::OLE::Variant;

STDOUT->autoflush;

my $wmi = Win32::OLE->GetObject('winmgmts:\\\\SYSTEM\root\cimv2') or die Win32::OLE->LastError;
my $list = $wmi->ExecQuery('SELECT * FROM Win32_PerfFormattedData_Counters_ProcessorInformation');
my $n = 0;
for my $cpu (in $list) {
  printf "%s: %d%%\n", $n ? "CPU$n" : ' ALL', $cpu->PercentProcessorTime;
  $n++;
}

输出

 ALL: 8%
CPU1: 8%
CPU2: 12%
CPU3: 6%
CPU4: 12%
CPU5: 6%
CPU6: 6%
CPU7: 6%
于 2013-01-21T07:43:22.663 回答