DOS バッチ スクリプトでは、plink を使用してリモート (Windows) コンピューターで単一のコマンドを実行しています。以前は、このコマンドはローカル マシンでのみ実行され、成功を判断するためにリターン コードに依存していました。この情報を plink から簡単に取得する方法はありますか?
2 に答える
では不可能plink
です。現在のコンセンサスは、リモート スクリプトecho
の終了コードをログ ファイルに保存し、それを使用pscp
してログ ファイルをローカル マシンに転送することです。
http://fixunix.com/ssh/74235-errorlevel-capturing-plink.htmlを参照してください。
ピリンと 0.66
C:\Code>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" bob@myserver exit 42
C:\Code>echo %ERRORLEVEL%
42
また、接続が確立できない場合に関する@John Wiersbaの懸念については、これは修正されたようです
C:\CodeMisc>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" bob@garbageservername exit 42
Unable to open connection:
Host does not exist
C:\Code>echo %ERRORLEVEL%
1
また、パイピングにも注意してくださいecho Y
...これにより、サーバーのフィンガープリントを自動的に受け入れることができます(控えめに言っても少し危険です...しかし、ログインサーバーは負荷分散されているため、常に異なるフィンガープリントを取得しています:()
ただし、@LeonBloyが指摘しているように、plinkにはゼロの終了コードを返す接続条件がまだいくつかあります。終了コードの範囲を知っていて、ファイルを介して Windows と通信する良い方法がない場合。終了コードに+3するか(終了コードが== 253-255にならないことがわかっている場合)、ビットごとのORを適用できます(exit $(($?|128))
bashでお勧めします)。
または、正確な終了コードを気にしない場合は、成功の場合は 2 を返し、失敗の場合は 0 を返すことができます。したがって、2 以外の終了コードは失敗を示します。bash では、次のようになりますecho $((($?==0) << 1))
。これは最も堅牢な汎用ソリューションですが、デバッグ機能のために終了コードがログに記録されていることを確認する必要があります。