我有两台不同的服务器(A 和 B,都是 Windows),我在它们之间通过命令行执行 putty。服务器 A 远程执行服务器 B 中的脚本,一切正常,但是一旦脚本在服务器 B 中执行,我就无法在服务器 A 中获得输出(ERRORLEVEL)。我的意思是,我可以获得输出,但总是说该过程已成功完成,即使服务器 B 中的进程失败了。
我附上了服务器 B 中的进程(ExProcess.bat)的一个小示例:
set LOG_PATH=C:\Project\Logs
set BIN_PATH=C:\Project\bin
cd %BIN_PATH%
C:
echo %date% %time% >> %LOG_PATH%\logfile.txt
EXECUTE_MY_COMMAND >> %LOG_PATH%\logfile.txt
if not %ERRORLEVEL%==0 exit %ERRORLEVEL%
以下是我从服务器 A 进行远程调用的方式:
putty -ssh server02 -P 22 -l user1 -pw password1 -m C:\Project\SSH_PRG0001_CMPG0001.txt
SSH_PRG0001_CMPG0001.txt 包含远程批处理(C:\ExProcess.bat)
如果我在执行 putty 命令后在 Windows 命令行中执行 %ERRORLEVEL%,我将无法获得远程运行的进程的正确输出。
我已经检查远程进程在服务器 B 中返回了正确的输出错误,但我的问题是我无法从服务器 A 获取此输出。
感谢您的帮助
答案1
正如您所发现的,这是行不通的。
%ERRORLEVEL%
(实际上,这不是“输出”,而是本地 shell 的一个函数)返回最后执行的命令的状态;在服务器 B 上,这是EXECUTE_MY_COMMAND
,正如您所希望的那样 - 但在 A 上,它却是putty
!由于 Putty 成功连接并执行了其操作,因此%ERRORLEVEL%
为 0,正如它应该的那样。
echo %ERRORLEVEL%
您可以修改 B 上的脚本,使其以类似(而不是您的语句)的内容结尾if
,然后在 A 上捕获该输出(例如通过重定向)并做出相应反应。或者,无论 A 上响应结果的是什么,您都可以考虑在 B 上做出反应,使整个过程在服务器 B 上完全独立,并且仅由来自 A 的连接触发。