Как получить сообщение об ошибке или сообщение после выполнения командлета в Perl

Я использую эту команду для поиска и получения сведений о файле на удаленном сервере.

my $output=`psexec \\\\host cmd /c "dir /s d:\\folder\file`

если файлы присутствуют, он отобразит все файлы и их путь, и они хранятся в $output, если путь не найден или если сервер не существует, он возвращает следующее в cmd, но не в $output

Starting cmd on host...ice on host... The system cannot find the path specified. cmd exited on host with error code 1.

Как я могу получить сообщение от cmd или сообщить об ошибке, я пробовал $! ничего не возвращает


person ninja    schedule 23.06.2017    source источник


Ответы (2)


Если вы работаете на современных машинах с Windows, можно использовать PowerShell, и psexec не нужен. Удаленный компьютер должен быть настроен для удаленного взаимодействия. Get-Help about_Remote_Requirements и Enable-PSRemoting.

Invoke-Command -ComputerName HOST001  -ScriptBlock { & cmd /c dir /s D:\thedir\ }

Сведения о запуске PowerShell из Perl см. в разделе Выполнение Powershell из Perl.

person lit    schedule 23.06.2017

Вы должны проверить stdin, stderr и, возможно, код выхода выполняемой команды. Есть несколько модулей, которые помогут вам в решении этой задачи, например Capture::Tiny.

use Capture::Tiny ':all';

# Capture from external command
# Adapt $cmd and @args to your needs

my $cmd = 'psexec';
my @args = ( );

my ( $stdout, $stderr, $exit_code ) = capture {
  system( $cmd, @args );
};
person Miguel Prz    schedule 23.06.2017
comment
Я получаю сообщение об ошибке this hande is invaild and error accessing the node, если помещаю всю эту команду psexec \\\\host cmd /c "dir /s d:\\folder\file в функцию system - person ninja; 23.06.2017