PowerShell执行ssh调用CertUtil报错但LastExitCode为0如何获取真实错误码
问题原因
你当前遇到的退出码未正确返回的问题,核心是远端命令的退出码没有完整透传回本地PowerShell,执行链路里的透传逻辑断裂了:
你执行的命令分为三层调用:本地PowerShell → 本地ssh程序 → 远端服务器ssh server → 远端执行CertUtil命令。默认场景下如果远端SSH的登录shell是PowerShell,PowerShell进程不会自动继承外部程序的退出码作为自身进程的退出码,始终返回0,所以ssh拿到的远端进程退出码就是0,本地$LastExitCode自然也为0。
解决方案
根据你远端SSH服务的默认登录shell类型选择对应调整方案即可:
远端登录shell为PowerShell
给远端执行的命令显式加上退出码透传逻辑:
powershell -command "& { ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=2 server@server -x -p 22 'CertUtil -hashfile program.jar MD5; exit $LastExitCode' }"
远端登录shell为CMD
调整命令为:
powershell -command "& { ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=2 server@server -x -p 22 'CertUtil -hashfile program.jar MD5 & exit %errorlevel%' }"
调整后远端执行CertUtil的错误码会被逐层透传回本地,你直接读取本地的$LastExitCode就能拿到真实的执行结果。
内容的提问来源于stack exchange,提问作者ololo
相关产品推荐
相关产品推荐

