top of page

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

  • エンジニアN
  • 2023年5月8日
  • 読了時間: 2分

更新日:4月2日

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の仕様も徐々に理解していきたいです。

 
 
 

最新記事

すべて表示
WSL上のUbuntuへリモートからSSH接続

普段はMacを使っているんですが、テストなどをする際にWindowsを触っています。社員の多くはWindowsですし、Dockerなどの環境はWSLを推奨しているので、そのテストも兼ねて、WSL上のUbuntuにリモートからSSH接続をしてみます。 参考にしたサイト...

 
 
 
bottom of page