假设我有 2 个服务器。假设我正在这 2 个服务器上按顺序执行操作(for 循环),并在 3 个场景中传递退出代码:
2 servers success: exit 0
2 servers fail: exit 1
1 server fail 1 server success: exit 0
目前,我使用它exit 1
向 AutoSys(我们有自动化作业)返回一个退出代码,以在出现故障时指示失败,并exit 0
指示成功。
然而,这也会退出脚本,所以无论我在哪里有这个命令,脚本都会停止执行。
这是目前的3个场景我有,但是,我们希望最后的方案来改变精细1 server fail 1 server success: exit 0
到1 server fail 1 server success: exit 1
如果一台服务器发生故障,其中,即使其它服务器成功,发送失败代码。
如果第一个服务器成功而第二个服务器失败,这通常可以工作,因为无论如何这是脚本的结尾,所以退出很好。但是在第一个服务器出现故障但还有另一台服务器可以运行该操作的情况下,它将退出而不让该操作在 server2 上运行。
所以我需要一种方法来退出 1(失败)而不结束脚本操作
我在 .bat 文件中做这样的事情。您可以通过退出编号判断哪个作业出错。这有点像在整数中设置位。
$err = 0
# 1st job
if (-not $?) { $err += 1 }
# 2nd job
if (-not $?) { $err += 2 }
# 3rd job
if (-not $?) { $err += 4 }
exit $err
也许您可以使用 $error 做一些事情,但它包含在 powershell 进程中运行的所有脚本的错误。
这是我最近一直在使用的另一种方法。您无法判断哪个命令产生了错误,但您可以判断整个脚本中有多少错误。
$errorcount = $Error.Count
Get-Childitem foo1
Get-Childitem foo2
Get-Childitem foo3
exit $Error.Count - $errorcount
然后,如果所有 3 个都不存在,$LASTEXITCODE 将是 3。或者 %errorlevel%。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句