このエントリーをはてなブックマークに追加


PowerShellのコマンドレットのエラーをTry..Catchする方法

PowerShellのコマンドレットでエラーが発生したときに Try Catch したいのですが、コマンドレットはエラー返却のため Catch の処理が動きません。
しかし、 -ErrorAction Stop をコマンドレットに設定すれば例外として Catch でトラップすることができます。

以下にサンプルを記します。

動作確認環境

  • Windows 10 22H2
  • PowerShell
    PS C:\> $PSVersionTable.PSVersion.ToString()
    5.1.19041.3636

コマンドレットのエラーを Catch でトラップするサンプル

以下、Get-ChildItem コマンドレットを使った例となります。

通常動作

指定したパスがないのでエラーが表示されます。

PS C:\> $non_existent_path = 'foo'

PS C:\> Get-ChildItem $non_existent_path
Get-ChildItem : パス 'C:\foo' が存在しないため検出できません。
発生場所 行:1 文字:1
+ Get-ChildItem $non_existent_path
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\foo:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Try Catch を試す

Catch にトラップされず、finallyの処理は実行されました。

サンプルコード

$non_existent_path = 'foo'
try {
  Get-ChildItem $non_existent_path
}
catch {
  Write-Host 'catch'
}
finally {
  Write-Host 'finally'
}

実行結果

Get-ChildItem : パス 'C:\foo' が存在しないため検出できません。
発生場所 行:3 文字:3
+   Get-ChildItem $non_existent_path
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   + CategoryInfo          : ObjectNotFound: (C:\foo:String) [Get-ChildItem], ItemNotFoundException
   + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

finally

Try Catch を試す

-ErrorAction Stopをコマンドレットに追記して実行すると Catch の処理が動作します。

サンプルコード

$non_existent_path = 'foo'
try {
  Get-ChildItem -ErrorAction Stop $non_existent_path
}
catch {
  Write-Host 'catch'
}
finally {
  Write-Host 'finally'
}

実行結果

catch
finally

例外メッセージを取得する

以下の構文により Catch にトラップされた例外メッセージを取得することができます。  $_.Exception.Message

サンプルコード

Catch に $_.Exception.Message を追記しています。

$non_existent_path = 'foo'
try {
  Get-ChildItem -ErrorAction Stop $non_existent_path
}
catch {
  Write-Host 'catch'
  Write-Host $_.Exception.Message
}
finally {
  Write-Host 'finally'
}

実行結果

catch
パス 'C:\foo' が存在しないため検出できません。
finally

以上、コマンドレットのエラーを Try Catch でトラップする方法でした。

 
 

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-11-02 (木) 21:13:12