用perl 监控windows

来源:互联网 发布:淘宝助理怎么新建宝贝 编辑:程序博客网 时间:2024/05/17 02:41
#!/usr/bin/perl -wuse Win32::OLE qw[in];my $host = $ARGV[0] || '.';my $wmi = Win32::OLE->GetObject( "winmgmts://$host/root/cimv2" )or die Win32::FormatMessage( Win32::OLE::LastError() );my %instances = (Win32_PhysicalMemory => \&get_pmem,Win32_PerfRawData_PerfOS_Memory => \&get_amem,Win32_Processor => \&get_load,Win32_LogicalDisk => \&get_disk,);while(1) {my $out = get_perf_data();print $out;print "\n";sleep(30);}sub get_perf_data {my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);$year = $year + 1900;$mon  = $mon + 1;my $str = sprintf "%4.4d-%2.2d-%2.2d",$year,$mon,$mday;my $timestr = sprintf "%2.2d:%2.2d:%2.2d",$hour,$min,$sec;my $mem;foreach ( keys %instances ) {my $class = $wmi->InstancesOf( $_ );$mem .= $instances{ $_ }->( $class );}my $out = "##\nCollect Time: ".$str." ".$timestr."\n".$mem."%%\r\n";return $out;}# get cpu loadavgsub get_load {my $class = shift;my $total="";my $i = 0;$i++,$total = $total."CPU No. $i: ".$_->{LoadPercentage}."%\n" foreach in($class);return $total;}# get total memory sizesub get_pmem {my $class = shift;my $total;$total += $_->{Capacity} foreach in($class);return "Physical Memory: $total Bytes\n";}# get available memory sizesub get_amem {my $class = shift;my $amem;$amem .= join ' ', $_->{AvailableBytes} foreach in($class);return "Available Memory: $amem Bytes\n";}# get free disk sizessub get_disk {my $class = shift;my $total = "";$total .= "DISK ".$_->{DeviceID}." Free: ".$_->{FreeSpace}." Bytes\n" foreach in($class);return $total}
0 0