【问题标题】:Get WMI Memory Values using Perl使用 Perl 获取 WMI 内存值
【发布时间】:2011-01-18 17:18:34
【问题描述】:

我需要使用 WMI 收集 Windows 操作系统的内存数据。从这个意义上说,我开发了一个 Perl 脚本来生成这样的数据。但是,我想知道我的方法是否正确以及有哪些替代方法。就 Windows 操作系统而言,收集数据的方法应尽可能广泛。

如果你不是perlish,这就是我要检查的内容:

MEM_USED = Win32_OperatingSystem->TotalVisibleMemorySize - Win32_OperatingSystem->FreePhysicalMemory
SWAP_USED = (Win32_OperatingSystem->SizeStoredInPagingFiles - Win32_OperatingSystem->FreeSpaceInPagingFiles) /  Win32_OperatingSystem->SizeStoredInPagingFiles

这是我的脚本:

#!/bin/env perl

use Win32::OLE;

use strict;
use warnings;

my $wmi = Win32::OLE->GetObject("winmgmts://./root/cimv2")
  or die "Failed getobject\n";

my $list, my $v;

$list = $wmi->InstancesOf("Win32_OperatingSystem")
  or die "Failed getobject\n";

my $end_time = time;


my ($total_mem, $free_mem, $used_mem, $mem_percent, $free_percent);

foreach $v (in $list) {

  $total_mem = $v->{TotalVisibleMemorySize};
  $free_mem = $v->{FreePhysicalMemory};
  $used_mem = $total_mem - $free_mem;
  $mem_percent = sprintf("%.2f", $used_mem / $total_mem * 100);
  $free_percent  =  sprintf("%.2f", $free_mem / $total_mem * 100);

  print "Memory used: $mem_percent\%\n";
  print "Memory free: $free_percent\%\n";
  print "Memory total: $total_mem kb\n";
  print "Memory used: $used_mem kb\n";
  print "Memory free: $free_mem kb\n";

  my $total_swap_mem = $v->{SizeStoredInPagingFiles};
  my $free_swap_mem = $v->{FreeSpaceInPagingFiles};
  my $used_swap_mem = $total_swap_mem - $free_swap_mem;
  my $used_swap_mem_perc = ($total_swap_mem - $free_swap_mem) / $total_swap_mem * 100;

  printf "Swap total:%d kb\n", $total_swap_mem;
  printf "Swap free:%d kb\n", $free_swap_mem;
  printf "Swap used:%d kb\n", $used_swap_mem;
  printf "Swap used:%.2f %%\n", $used_swap_mem_perc;
}

注意:我在 2011-01-19 更新了这个脚本,因为当时与发布的 cmets 没有冲突。

【问题讨论】:

  • 从这里看起来不错。从 Windows 2000 开始支持 winmgmtsWin32_OperatingSystem。是否需要支持比这更早的版本?
  • 哼...我认为它错了!经过一些谷歌研究,我发现:虚拟内存 = PhysicalMemory(RAM) + Extended Memory (Disk) 我需要重新创建脚本...
  • 我已经更新了 perl 脚本...现在是否正确?
  • gulden PT,到底是什么问题? -- 你是在问WMI属性是否被正确使用,或者脚本是否是好的perl?
  • 第一个,但如果你想回答“如果脚本是好的perl?”,它对我也很有用。

标签: perl wmi


【解决方案1】:

我建议你看看这个 Perl 小项目:

Check WMI Plus

它不需要客户端,可以在 Linux 下运行,也可以在远程 Windows 机器上运行。我最近一直在使用它来监控内存使用情况。

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多