Uses pslist from the open source pstools suite from
http://www.sysinternals.com to produce a hash containing current process data.
Takes a set of key,value pairs. Currently accepts 'process' and 'machine' keys. Will extend with additional pslist options at a later date. NOTE, leading \\ on machine name is optional, and process name should not have an extension.
There probably is a better way to do this, but this tool works on local and remote machines and its really easy to use...
;-)
Or maybe that isnt the best excuse?
use strict;
use warnings;
use constant Process_EXE => 'pslist.exe';
sub process_hash {
my %params=@_;
my $find_process=quotemeta($params{process}||"");
my $machine =($params{machine}||"");
$machine="\\\\".$machine if $machine && $machine!~/^\\\\/;
open my $process,"pslist.exe $machine |" or die " Cant open pstool
+s!";
my %processes;
my @field_names=("Name","Pid","Pri","Thd","Hnd","Mem","User Time",
+"Kernel Time","Elapsed Time");
while (<$process>) {
chomp;
my @process_data=split/\s+/;
next unless @process_data==9;
if ($process_data[1]=~/pid/i) {
next
} else {
my %process;
@process{@field_names}=@process_data;
$processes{$process_data[0]}=\%process;
return \%process if $process_data[0]=~/^$find_process$/i;
}
}
return $find_process ? undef : \%processes;
}
use Data::Dumper;
# All processes on local machine
print Dumper(process_hash());
# Process info about explorer
print Dumper(process_hash(process=>'explorer'));
# Process list from a remote machine
print Dumper(process_hash(machine=>'brahma'));