#! perl -w use strict; use Win32::PerfLib; my (%counters, %r_counters); Win32::PerfLib::GetCounterNames('', \%counters); # Build a reverse lookup table. Names are clearer than numbers. @r_counters{values %counters} = (keys %counters); # retrieve the id for process object my $processObj_id = $r_counters{Process}; # retrieve the id for the process ID counter my $processCounter_id = $r_counters{'ID Process'}; my %processes; # create connection to $server my $perflib = new Win32::PerfLib(''); # get the performance data for the process object $perflib->GetObjectList($processObj_id, \%processes); $perflib->Close(); my $pInstances = $processes{Objects}{$processObj_id}{Instances}; foreach my $p (keys %{$pInstances}) { my $pICounters = $pInstances->{$p}{Counters}; foreach my $i (keys %{$pICounters}) { if($pICounters->{$i}{CounterNameTitleIndex} == $processCounter_id) { printf( "% 6d %s\n", $pICounters->{$i}{Counter}, $pInstances->{$p}{Name} ); } } }