2017-06-23 35 views
0

執行小命令我使用這個命令到遠程服務器如何獲得錯誤或消息在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或報告錯誤,我試過$!不返回任何東西

+0

https://perldoc.perl.org//perlop.html#qx%2f_STRING_%2f –

回答

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

2

你必須檢查標準輸入,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); 
}; 
+0

我得到的錯誤'這是喊得和invaild錯誤訪問節點'如果我把'system'函數中的整個命令'psexec \\\\ host cmd/c「dir/sd:\\ folder \ file' – ninja