use Win32::Perflib; $server=shift ARGV; check_disk(0,$server); sub check_disk { ($ip,$server) = @_; @disks = (); Win32::PerfLib::GetCounterNames($server, \%counter); %r_counter = map { $counter{$_} => $_ } keys %counter; # retrieve the id for process object $object = $r_counter{LogicalDisk}; # retrieve the id for the process ID counter $counters = $r_counter{'Free Megabytes'}; # create connection to $server $perflib = new Win32::PerfLib($server); if(!$perflib){ print "Drive Space \= Unknown,"; print RESULTS "Unknown,"; undef $perflib; return; } $proc_ref = {}; # get the performance data for the process object $perflib->GetObjectList($object, $proc_ref); $perflib->Close(); $instance_ref = $proc_ref->{Objects}->{$object}->{Instances}; while (($key,$value) = each %{$instance_ref}) { $drive = %{$value}->{Name}; $counter = %{$value}->{Counters}; } print "LogicalDisk Capacity Remaining:\n"; foreach $p (sort keys %{$instance_ref}) { $counter_ref = $instance_ref->{$p}->{Counters}; foreach $i (keys %{$counter_ref}) { if($counter_ref->{$i}->{CounterNameTitleIndex} == $counters & $instance_ref->{$p}->{Name} !~ /total/i ){ if ($counter_ref->{$i}->{Counter} < 500) { # print "$server"." $instance_ref->{$p}->{Name} Drive"."$counter_ref->{$i}->{Counter} MB Remaining\n"; } print "Drive $instance_ref->{$p}->{Name} \= $counter_ref->{$i}->{Counter} MB\n"; push @disks, "Drive $instance_ref->{$p}->{Name} \= $counter_ref->{$i}->{Counter} MB"; undef $perflib; } } } $disks = join('|', @disks); return "$disks"; }