免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11575 | 回复: 12
打印 上一主题 下一主题

用perl 监控windows [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-25 17:24 |只看该作者 |倒序浏览
最近在学习perl,就用perl写了一个监控windows主机的脚本,大家给看看

  1. #!/usr/bin/perl -w
  2. use Win32::OLE qw[in];

  3. my $host = $ARGV[0] || '.';
  4. my $wmi = Win32::OLE->GetObject( "winmgmts://$host/root/cimv2" )
  5.         or die Win32::FormatMessage( Win32::OLE::LastError() );

  6. my %instances = (
  7.         Win32_PhysicalMemory => \&get_pmem,
  8.         Win32_PerfRawData_PerfOS_Memory => \&get_amem,
  9.         Win32_Processor => \&get_load,
  10.         Win32_LogicalDisk => \&get_disk,
  11. );

  12. while(1) {
  13.         my $out = get_perf_data();
  14.         print $out;
  15.         print "\n";
  16.         sleep(30);
  17. }

  18. sub get_perf_data {
  19.         my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  20.         $year = $year + 1900;
  21.         $mon  = $mon + 1;
  22.         my $str = sprintf "%4.4d-%2.2d-%2.2d",$year,$mon,$mday;
  23.         my $timestr = sprintf "%2.2d:%2.2d:%2.2d",$hour,$min,$sec;
  24.        
  25.         my $mem;
  26.         foreach ( keys %instances ) {
  27.                 my $class = $wmi->InstancesOf( $_ );
  28.                 $mem .= $instances{ $_ }->( $class );
  29.         }
  30.        
  31.         my $out = "##\nCollect Time: ".$str." ".$timestr."\n".$mem."%%\r\n";
  32.         return $out;
  33. }

  34. # get cpu loadavg
  35. sub get_load {
  36.         my $class = shift;
  37.         my $total="";
  38.         my $i = 0;
  39.         $i++,$total = $total."CPU No. $i: ".$_->{LoadPercentage}."%\n" foreach in($class);
  40.         return $total;
  41. }

  42. # get total memory size
  43. sub get_pmem {
  44.         my $class = shift;
  45.         my $total;
  46.         $total += $_->{Capacity} foreach in($class);
  47.         return "Physical Memory: $total Bytes\n";
  48. }

  49. # get available memory size
  50. sub get_amem {
  51.         my $class = shift;
  52.         my $amem;
  53.         $amem .= join ' ', $_->{AvailableBytes} foreach in($class);
  54.         return "Available Memory: $amem Bytes\n";
  55. }

  56. # get free disk sizes
  57. sub get_disk {
  58.         my $class = shift;
  59.         my $total = "";
  60.         $total .= "DISK ".$_->{DeviceID}." Free: ".$_->{FreeSpace}." Bytes\n" foreach in($class);
  61.                
  62.         return $total
  63. }

复制代码

论坛徽章:
0
2 [报告]
发表于 2007-01-25 17:52 |只看该作者
牛~

我以前写的显示CPU占用率的程序费了好大劲···

论坛徽章:
0
3 [报告]
发表于 2007-01-25 19:10 |只看该作者
牛,不错
在找个数据库定期写入
再处理,一个很好的报告了

论坛徽章:
0
4 [报告]
发表于 2007-03-09 22:27 |只看该作者
原帖由 jeffwang8001 于 2007-1-25 17:24 发表
最近在学习perl,就用perl写了一个监控windows主机的脚本,大家给看看
[code]
#!/usr/bin/perl -w
use Win32::OLE qw[in];

my $host = $ARGV[0] || '.';
my $wmi = Win32::OLE->GetObject( "winmg ...


我看了下Win32::OLE 但是我不知道
$wmi->InstancesOf( $_ )
$_->{LoadPercentage}
$_->{Capacity}
$_->{DeviceID}
$_->{FreeSpace}
怎么来的????要是系统的,我怎么找到呢?

论坛徽章:
0
5 [报告]
发表于 2007-03-10 13:01 |只看该作者
没人来解释一下吗?

论坛徽章:
0
6 [报告]
发表于 2007-03-10 19:35 |只看该作者
这个属于WMI的范畴, 去MSDN上看。
http://msdn2.microsoft.com/en-us/library/aa394084.aspx

论坛徽章:
0
7 [报告]
发表于 2007-03-23 12:17 |只看该作者
强,学习

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
8 [报告]
发表于 2007-03-24 09:43 |只看该作者
路过学习下哈哈

论坛徽章:
0
9 [报告]
发表于 2008-12-02 10:42 |只看该作者
很好,厉害

论坛徽章:
0
10 [报告]
发表于 2008-12-02 11:37 |只看该作者
恩 收藏了 谢谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP