はじめに
私はPowerShellを書くときに、以下のコードをおまじない的にいつも記述しています。
#!/usr/bin/env pwsh #Requires -Version 7.4 # Paramに関する記述 $PSNativeCommandUseErrorActionPreference = $true $ErrorActionPreference = "Stop"
このコードのついて今回は書いていきます。
解説
#!/usr/bin/env pwsh
まずはshebang
(シェバン)の設定です。こうすることでスクリプトをPowerShell Core
で実行することを指定します。
これがあればchmod +x ./test.ps1
のように実行権限を与えることで、シームレスにスクリプトを実行できます。
$ ./test.ps1
#Requires -Version 7.4
これを記述することで、スクリプトがPowerShell 7.4以上で実行されることを保証します。
なぜPowerShell 7.4
以上に固定するのかというと、この後理由を説明します。
$PSNativeCommandUseErrorActionPreference = $true
ネイティブコマンド(PowerShell以外のコマンド、例えばgitやcurlなど)に対して、0以外の終了コードであった場合に$ErrorActionPreference
の設定を適用するためのものです。PowerShell 7.4以降にデフォルトがfalse
になっています。
$PSNativeCommandUseErrorActionPreferenceが$trueされると、0 以外の終了コードを持つネイティブ コマンドは、$ErrorActionPreferenceに従ってエラーを発行します。
デフォルトでは、ネイティブコマンドがエラーを返しても、PowerShellはそれをエラーとして扱わず、スクリプトの実行を続行してしまいます。そこで$PSNativeCommandUseErrorActionPreference = $true
を設定すると、ネイティブコマンドがエラーを返した場合に、$ErrorActionPreference
の設定に従ってエラーハンドリングが行われます。
$ErrorActionPreference = "Stop"
$ErrorActionPreference
は、PowerShellのエラーハンドリングの動作を制御するための変数です。この変数は、コマンドレットやスクリプトがエラーを発生させたときにどのように動作するかを指定します。
PowerShell が終了しないエラー (コマンドレットの処理を停止しないエラー) に応答する方法を決定します。 たとえば、コマンド ラインやスクリプト、コマンドレット、プロバイダーなど、 Write-Error コマンドレットによって生成されたエラーなどです。
どんな設定があるのかは公式ドキュメントを確認してほしいですが、デフォルトだとContinue
であり、エラー メッセージが表示され、実行が続行されます。
$ErrorActionPreference = "Stop"
を設定すると、コマンドレットやスクリプトがエラーを発生させた場合にスクリプトの実行が停止します。