PowerShell コマンドレットを終了する、および終了しないエラーにより CodeDeploy でライフサイクルイベントフックが失敗するようにする方法を教えてください。

最終更新日: 2019 年 9 月 17 日

AWS CodeDeploy のデプロイライフサイクルイベントフックが、実行中にエラーを返す Windows PowerShell を呼び出します。ただし、コマンドレットは終了コード 0 (成功) を返し、デプロイは成功とレポートします。

PowerShell コマンドレットを終了するエラーと終了しないエラーの両方が、CodeDeploy でライフサイクルイベントフックを失敗させることをどのようにして確認できますか?

簡単な説明

デフォルトでは、回復不能または終了するエラーが発生しない限り (たとえば、0 で除算する場合)、PowerShell コマンドレットは終了コード 0 を返します。PowerShell コマンドレットで回復可能なエラー (存在しないディレクトリの読み取りを試みるなど) が発生した場合、コマンドレットは完了まで実行され、終了コード 0 を返します。ただし、CodeDeploy は、関連付けられたスクリプトが 0 以外の終了コードを返さない限り、ライフサイクルイベントフックの失敗をレポートしません。詳細については、PowerShell で終了しないエラーを理解するを参照してください。

終了しないエラーが発生したときにライフサイクルイベントフックを失敗させるには、$ErrorActionPreference 変数を設定してスクリプトの動作を変更します。

解決方法

重要: 以下の解決方法は Windows PowerShell 5.1 以降で機能します。

1.    $PSVersionTable コマンドを実行して使用している PowerShell のバージョンを確認し、必要に応じて PowerShell のバージョンをアップグレードします。

2.    PowerShell コマンドレットの先頭に次のコードを含めます。

$ErrorActionPreference = 'Stop'

$ErrorActionPreferenceStop に設定すると、PowerShell はコマンドレットの実行を停止し、終了するエラーと終了しないエラーの両方で終了コード 1 を返します。