Home > Windows にまつわる e.t.c.

例外を throw しない PowerShell コマンドレットを try catch でトラップする


PowerShell のコマンドレットは、エラー発生時に赤文字でエラーメッセージを表示します。

対話処理をしているときはこれで問題無いのですが、スクリプトでこれが発生した時に try catch でトラップしたいことがあります。

ところが、コマンドレットで発生するのはエラーであって、例外ではないため try catch ではトラップできません。

例えば、Rest API 叩くために Invoke-RestMethod 使って、エラーが帰ってきても赤色のエラーメッセージが表示されるだけです。

そんな時は、-ErrorAction オプションに Stop を指定すれば、エラー時に例外を throw してくれるので try catch でトラップできます。

 

例外発生時のメッセージは、$_.Exception.Message に格納されているので、これを使えばエラーメッセージをハンドリングすることが出来ます。

 

こんな感じ

try{
    $GetData = Invoke-RestMethod -Method Get -Uri $URI -Headers $headers -ErrorAction Stop
catch{
    Write-Host "エラーが発生しました"
    $ErrorMessage = $_.Exception.Message
    Write-Host "エラーメッセージ : $ErrorMessage"
}

 

余談ですが、自分で例外を throw する場合は、$ErrorActionPreference に "Stop" をセットして throw すればスクリプトを終了させることが出来ます。

$ErrorActionPreference = "Stop"
throw "例外が発生しました"

 

例外については、こちらのページに詳しくまとまっているので、ディープな事を知りたいのであれば一読してください。

例外について知りたかったことのすべて - PowerShell | Microsoft Docs
https://docs.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-exceptions?WT.mc_id=WD-MVP-3688

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.