如何使 PowerShell cmdlet 终止和非终止错误导致生命周期事件钩子在 CodeDeploy 中失败?

上次更新日期:2022 年 2 月 3 日

AWS CodeDeploy 中的部署生命周期事件钩子调用了返回错误的 Windows PowerShell cmdlet。但是,cmdlet 返回退出代码 0(成功),并且部署报告成功。 如何确保终止和非终止 PowerShell cmdlet 错误导致生命周期事件钩子在 CodeDeploy 中失败?

简短描述

默认情况下,除非遇到不可恢复的或终止错误,否则 PowerShell cmdlet 将运行至完成并返回退出代码 0。除非相关脚本返回的退出代码不为 0,否则 CodeDeploy 不会报告生命周期事件钩子失败。

要使生命周期事件钩子在发生非终止错误时失败,请更改脚本的行为。要更改脚本的行为,请将 cmdlet 中的 $ErrorActionPreference 变量配置为 ‘Stop’(停止)。然后,PowerShell 将停止 cmdlet 运行,并为终止和非终止错误返回退出代码 1。

有关更多信息,请参阅 Microsoft Scripting Blog 中的了解 PowerShell 中的非终止错误

解决方法

重要提示:以下解决方法适用于 Windows PowerShell 5.1 及更高版本。

1.    通过运行以下 $PSVersionTable 命令来验证您使用的 Windows PowerShell 版本:

$PSVersionTable

2.    如果您的 Windows PowerShell 版本早于 5.1 版,则请升级您的 PowerShell 版本。有关说明,请参阅 Microsoft Docs 网站上的下载并安装 Windows PowerShell 5.1

3.    在 PowerShell cmdlet 的开头添加以下代码:

$ErrorActionPreference = 'Stop'

PowerShell 现在会停止 cmdlet 并针对终止和非终止错误返回退出代码 1。