- 论坛徽章:
- 0
|
最近在学习perl,就用perl写了一个监控windows主机的脚本,大家给看看
- #!/usr/bin/perl -w
- use 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 loadavg
- sub 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 size
- sub get_pmem {
- my $class = shift;
- my $total;
- $total += $_->{Capacity} foreach in($class);
- return "Physical Memory: $total Bytes\n";
- }
- # get available memory size
- sub get_amem {
- my $class = shift;
- my $amem;
- $amem .= join ' ', $_->{AvailableBytes} foreach in($class);
- return "Available Memory: $amem Bytes\n";
- }
- # get free disk sizes
- sub get_disk {
- my $class = shift;
- my $total = "";
- $total .= "DISK ".$_->{DeviceID}." Free: ".$_->{FreeSpace}." Bytes\n" foreach in($class);
-
- return $total
- }
复制代码 |
|