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

上次更新时间:2019 年 9 月 17 日

AWS CodeDeploy 中的部署生命周期事件钩子调用在执行时会返回错误的 Windows PowerShell cmdlet。但是,cmdlet 返回退出代码 0(成功),并且部署报告成功。

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

简短描述

默认情况下,除非遇到不可恢复的或终止错误(例如,除数为 0),否则 PowerShell cmdlet 都会返回退出代码 0。如果 PowerShell cmdlet 遇到可恢复的错误(例如试图读取不存在的目录),cmdlet 仍然可以运行直至完成,并返回退出代码 0。然而,除非相关脚本返回的退出代码不为 0,否则 CodeDeploy 不会报告生命周期事件钩子失败。有关更多信息,请参阅了解 PowerShell 中的非终止错误

要在遇到非终止错误时使生命周期事件钩子失败,请通过配置 $ErrorActionPreference 变量更改脚本行为。

解决方法

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

1.    运行 $PSVersionTable 命令确定您安装的 PowerShell 的版本,然后根据需要升级 PowerShell 版本

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

$ErrorActionPreference = 'Stop'

如果将 $ErrorActionPreference 设置为 Stop,则 PowerShell 将停止执行 cmdlet,并针对终止和非终止错误返回退出代码 1。