top of page
  • エンジニアN

【PowerShell】例外として処理できないコマンドレットの対処法

PowerShellにて、例外として処理できないコマンドレットが存在していました。

対処法として、上記コマンドレットに「-ErrorAction Stop」を追加したところ、

例外として処理できるようになりました。

今回は、該当コマンドレットの一つである「Get-ChildItem」を使用し、サンプルとして投稿していこうと思います。


<前提>

以下のファイルはエクスプローラーに存在しておりません。

"C:\hoge.txt"


まずは「Get-ChildItem」が例外として処理できないコマンドレットであることを確認します。


■スクリプト内容

Write-Output "start"

try{
    Get-ChildItem "C:\hoge.txt"
}catch{
    Write-Output "例外をcatchしたよ!プログラムを終了します。"
    exit
}

Write-Output "end"

■出力結果

start
Get-ChildItem : パス 'C:\hoge.txt' が存在しないため検出できません。
発生場所 C:\Users\Administrator\Desktop\test\hoge.ps1:4 文字:5
+     Get-ChildItem "C:\hoge.txt"
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\hoge.txt:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
 
end

catch内の処理が実行されていないことから「Get-ChildItem」が例外として処理できないコマンドレットであることが確認できます。

また"end"の出力があるため、最後まで処理が実行されたことも確認できます。


続いて「Get-ChildItem」に「-ErrorAction Stop」を追加し、例外として処理できるようになることを確認します。


■スクリプト内容

Write-Output "start"

try{
    Get-ChildItem "C:\hoge.txt" -ErrorAction Stop
}catch{
    Write-Output "例外をcatchしたよ!プログラムを終了します。"
    exit
}

Write-Output "end"

■出力結果

start
例外をcatchしたよ!プログラムを終了します。

catch内の処理が実行されているため「Get-ChildItem」が例外として処理できていることが確認できます。また"end"の出力は無いため、catch内のexitにて処理が終了したことも確認できます。


他プログラミング言語であるJavaでは、例外処理が発生しない(例外クラスのインスタンスが生成されない)経験が無かったので、今回とても勉強になりました。

PowerShellの仕様も徐々に理解していきたいです。

閲覧数:63回0件のコメント

最新記事

すべて表示

記事を読んで頂きありがとうございます。 私はIT業界未経験でCCFに入社させて頂きました。 2023年11月に入社させて頂いてから早いもので、もう半年が経とうとしています。 CCFに入社してから感じたことをまとめてみました。 1.とにかく知識が豊富 2.向上心溢れる社員の方々 3.仕事やプライベートとの向き合い方 4.人生設計について 1.とにかく知識が豊富 入社させて頂いてびっくりしました。こん

bottom of page