我可以從命令行運行Perl腳本時沒有任何問題,但是當我嘗試使用Windows任務管理器(64位Windows 2008 Server)自動執行此任務時, SSH/SSH2的輸出不能寫入outfile。這是一個Perl腳本,它確實是這樣的:Perl腳本調用ssh2命令無法在windows任務調度程序中返回輸出
my $DB_FILE1=$PATH . "\\FSBusinessUtil_" . $hostfqdn . $DATE;
open(OUTFILE, ">$DB_FILE1") or die "Could not open data file ";
print OUTFILE "FilesystemInfo\n";
my $output1=`$SSH_PATH\\ssh $user\@$hostname NAS_DB=/nas /nas/bin/./nas_fs -list`;
if($? != $RC_OK){
open(OUT1FILE, ">$PATH\\errFSBusinessUtil_$hostfqdn$DATE");
print OUT1FILE localtime(time) . " Remote ssh failed to create $DB_FILE1. Error: $output1\n";
close OUT1FILE;
}
else {
$output1=~ s/%%%/\n/g;
print OUTFILE $output1;
}
close OUTFILE;
的Perl腳本本身得到了由Windows任務計劃程序調用,但在輸出文件中,我看到的是「FilesystemInfo」行腳本打印在調用ssh命令之前退出。除此之外,該命令確實失敗了,因爲我看到了生成的錯誤文件。但仍然,$ output1是空的,所以只有「遠程SSH無法創建...錯誤:」。
我會開始調試它打印出完整的ssh命令,然後再運行它以查看它是否全部正確。我也懷疑任務管理器可能無法像你一樣訪問相同的ssh密鑰或ssh代理。作爲一個附註,使用[詞法文件句柄](http://perldoc.perl.org/functions/open.html)進行研究,你就不會遇到那種你必須解決的衝突。非常混亂的名字。 – Schwern
只需注意:正斜線可用於Windows中的所有路徑名稱,這被認爲是一種更好的做法,因爲它可以減少字符逸出的混淆。 – dan1111