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

与 plink 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 中)。

Or if you don't care about the exact exit code, you could return 2 for success, and zero for failure. Thus a non-two exit code would indicate failure. In bash this would be: echo $((($?==0) << 1)). This would be by far the most robust general purpose solution, but you should make sure your exit code is logged for debug-ability.

于 2016-12-08T19:07:32.517 回答