我正在使用此命令在远程服务器上搜索并获取文件详细信息
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收到消息或报告错误,我试过$!
不会返回任何内容
答案 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_Requirements
和Enable-PSRemoting
。
Invoke-Command -ComputerName HOST001 -ScriptBlock { & cmd /c dir /s D:\thedir\ }
要从Perl运行PowerShell,请参阅Executing Powershell from Perl