如何从PowerShell脚本获取退出代码 [英] How To Get Exit Code From PowerShell Script

查看:33
本文介绍了如何从PowerShell脚本获取退出代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写一个PowerShell脚本,每当我们的构建系统无法将Docker映像推送到Docker Hub时,该脚本就会发送一个松弛通知。如何检测和处理来自docker push命令的Process exited with code 1?我尝试过以下操作,但未调用catch挡路。

try {
  docker push $dockerImage;
}catch{
  #Send error details to Slack
}

推荐答案

  • 自PowerShell 7.2起,调用外部程序(如docker)从不导致语句终止错误[1],您可以使用try / catch

    捕获该错误
    • 但是,计划在将来将选择加入与PowerShell的错误处理集成-请参阅this RFCdiscussion that preceded it

    • 通常,请注意,如果PowerShell甚至无法启动命令(例如,当您提供不存在的可执行文件名称或路径时),会发生语句终止PowerShell错误(可以使用try/catch捕获错误)会发生语句终止错误(可以用try/catch捕捉到)如果PowerShell甚至无法启动命令,是否会发生错误

      try   { nosuchexe foo bar }
      catch { Write-Warning "Failed to invoke nosuchexe: $_" }
      
  • automatic $LASTEXITCODE variable反映最近执行的外部程序的进程退出代码。按照惯例,退出代码0表示成功,其他任何情况都表示错误情况。

因此:

docker push $dockerImage
if ($LASTEXITCODE -ne 0) {
  #Send error details to Slack
}

另请参阅:

  • This answer提供了有关PowerShell中退出代码处理的详细信息。

[1]唯一例外是bug,它出现在PowerShell 7.1中,其中重定向stderr输出(2>*>)与$ErrorActionPreference = 'Stop'的组合意外地导致脚本-如果有实际的stderr输出,则终止错误-请参见this answer

这篇关于如何从PowerShell脚本获取退出代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆