如何在perl中执行cmdlet后获取错误或消息

时间:2017-06-23 06:37:39

标签: perl cmd

我正在使用此命令在远程服务器上搜索并获取文件详细信息

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收到消息或报告错误,我试过$!不会返回任何内容

2 个答案:

答案 0 :(得分:2)

您必须检查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 );
};

答案 1 :(得分:0)

如果您使用的是现代Windows机器,则可以使用PowerShell,而无需使用psexec。需要设置远程机器进行远程处理。 Get-Help about_Remote_RequirementsEnable-PSRemoting

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

要从Perl运行PowerShell,请参阅Executing Powershell from Perl