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 pstools!"; 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'));