这里的背景是我在Windows上使用SaltStack,因为它的Windows支持是不完整的,我必须让它运行很多批处理和PowerShell脚本或命令。
Salt是一个Python程序,因此它会生成powershell.exe和cmd.exe的实例,并向它们传递要运行的显式代码或文件路径。在最简单的模型中,Salt使用cmd.exe或powershell.exe进程的返回值来确定任务是成功还是失败。
我想知道的是,在每种情况下控制返回值的是什么?它只是shell执行的最后一个命令的退出代码,除非你用返回代码明确地调用“退出”吗?
我知道在Powershell中你有 $?和 $ lastexitcode ,它们有不同的用途。我想知道这是否使事情复杂化。 powershell.exe的返回代码是否会有所不同,具体取决于执行的最后一个命令是PowerShell函数还是Cmdlet,还是WIN32二进制文件?
脚本文件与显式命令的规则是否相同?
即
PowerShell -Command Write-Host "Foo"
VS。
PowerShell -File script.ps1
cmd /c echo foo
VS
cmd /c test.bat
也许这很简单,但我见过一些例子: -
cmd /c do_something & exit %ERRORLEVEL%
echo do_something; exit $lastexitcode | powershell -command -
我很想知道这个错误处理的正确性是什么。