如何从 PowerShell 脚本中获取退出代码

How To Get Exit Code From PowerShell Script

我正在尝试编写一个 PowerShell 脚本,当我们的构建系统无法将 Docker 图像推送到 Docker Hub 时,它会发送一个 Slack 通知。如何检测和处理 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

    捕获
    • 但是,opt-in 与 PowerShell 错误处理的集成正在计划在未来进行 - 请参阅 this RFC and the discussion that preceded it

    • 通常,请注意语句终止 PowerShell 错误(可以try / catch 捕获)does 如果 PowerShell 甚至无法 launch 一个命令,比如当你提供一个 不存在的 可执行文件时名称或路径;例如:

      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
}

另请参阅:

  • 包含有关 PowerShell 中退出代码处理的更多信息。

[1] 唯一的例外是 bug,出现在 PowerShell 7.1 中,其中 redirecting stderr output2>*>)与 $ErrorActionPreference = 'Stop' 意外导致 script-如果有实际的 stderr 输出 - 见 .