11

DOS バッチ スクリプトでは、plink を使用してリモート (Windows) コンピューターで単一のコマンドを実行しています。以前は、このコマンドはローカル マシンでのみ実行され、成功を判断するためにリターン コードに依存していました。この情報を plink から簡単に取得する方法はありますか?

4

2 に答える 2

6

では不可能plinkです。現在のコンセンサスは、リモート スクリプトechoの終了コードをログ ファイルに保存し、それを使用pscpしてログ ファイルをローカル マシンに転送することです。

http://fixunix.com/ssh/74235-errorlevel-capturing-plink.htmlを参照してください。

于 2010-11-03T19:15:02.947 に答える
3

ピリンと 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))。これは最も堅牢な汎用ソリューションですが、デバッグ機能のために終了コードがログに記録されていることを確認する必要があります。

于 2016-12-08T19:07:32.517 に答える