我有一个同步powershell脚本,它可以同步两个不同服务器上的1个多维数据集。
我为两个服务器中的每一个设置了一个标志,在此情况下可能会发生三种情况:
1:两台服务器均为
2:两个服务器都为假
3:1台服务器为TRUE,另一台服务器为FALSE
一种情况下,退出代码为0
(成功同步)
方案2的退出代码为1
(同步失败)
但是对于场景3,如果一台服务器设置为false,则失败将退出,但退出应为1,但脚本应继续运行,因为另一台服务器可以同步,退出代码为0,则成功。
exit的问题是它在被调用时退出脚本的其余部分。我想要该退出机制的替代方案来解决方案3。我发现最接近的是:
[ $PS1 ] && return || exit;
或
[ -v PS1 ] && return || exit
但是我不确定如何在那儿传递代码(0或1),更不用说我收到了无论如何都无法识别该命令的错误。
在“ [”之后缺少类型名称。
令牌'||'在此版本中不是有效的语句分隔符。
在此版本中,标记'&&'不是有效的语句分隔符。
我需要退出代码的原因是因为它们像这样传递回了批处理文件:
if %errorlevel% NEQ 0 GOTO :error
GOTO :end
:error
REM echo Exit Code: %ERRORLEVEL%
REM echo Failed!
EXIT /B %ErrorLevel%
:end
REM echo Exit Code: %ERRORLEVEL%
REM echo Success!
依赖哪个第三方自动化(autosys)来反映状态。
答案 0 :(得分:2)
查看这篇文章。它深入介绍了该主题:
https://weblogs.asp.net/soever/returning-an-exit-code-from-a-powershell-script
我不想摆脱Serge的回答(有些详尽),但作为提示,他的第一个结论是:
“不要使用exit从PowerShell代码中返回值,而是使用以下函数:
function ExitWithCode
{
param
(
$exitcode
)
$host.SetShouldExit($exitcode)
exit
}
答案 1 :(得分:0)
由于似乎没有其他选择(通过退出代码而不退出退出),因此我使用了条件增量式,其中
if ($i -eq 1) # 1 indicates that it ran successfully on just one server (scenario3)
{exit 0} # 0 for success
elseif ($i -gt 1) #if scenario 2 was the case, provide exit 1 for failure on BOTH servers
{ exit 1 }
else {exit 0} #for scenario 1
我所有的方案现在都按预期工作,解决了退出代码问题