在DOS批处理脚本中,我使用plink在一台远程(也是windows)计算机上运行一条命令。以前,此命令仅在本地计算机上运行,并且依赖于返回代码来确定是否成功。有没有一种方法可以很容易地通过plink获取这些信息?
发布于 2010-11-04 03:15:03
这在plink中是不可能的。当前的共识是让远程脚本将其退出代码echo到日志文件中,然后使用pscp将日志文件传输到本地计算机。
参见http://fixunix.com/ssh/74235-errorlevel-capturing-plink.html。
发布于 2016-12-09 03:07:33
使用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)) - in bash)。
或者,如果您不关心确切的退出代码,则可以返回2表示成功,返回0表示失败。因此,如果退出代码不是两个,则表示失败。在bash中应该是:echo $((($?==0) << 1))。这将是到目前为止最健壮的通用解决方案,但是您应该确保您的退出代码被记录下来以便于调试。
https://stackoverflow.com/questions/4090367
复制相似问题