According to online sources, it seems that psexec sends its output to stderr. This ought to work:
use File::Temp qw(tempfile);
my $stderr_fh = tempfile();
my $stdout = do {
open(*STDERR, ">&", $stderr_fh)
or die "Could not capture STDERR: $!";
qx(psexec \\\\server netstat -n);
};
seek($stderr_fh, 0, 0);
my $stderr = do { local $/; <$stderr_fh> };
print "psexec stdout: $stdout\n";
print "-" x 60, "\n";
print "psexec stderr: $stderr\n";
My previous code did not work for a couple of reasons:
- The ">", \$stderr form of open failed on Win32 for some reason. Worked around using a temp file.
- Can't localize *STDERR.
|