在PowerShell中是否可以使用“退出”替代方法?

时间:2018-09-26 22:49:31

标签: powershell batch-file

我有一个同步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)来反映状态。

2 个答案:

答案 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

我所有的方案现在都按预期工作,解决了退出代码问题