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

閲覧数:2,244回0件のコメント

最新記事

すべて表示

就職する企業への考え方

今年は様々な学校様宛に求人票を出させて頂いたので、就活でCCFを気になって この記事を見てくれる方々がたくさんいると信じ…就活生向けに書いてみたいと思います。 就職において、大きな柱として考えるものは人さまざまだとは思いますが 「やりがい」、「雰囲気」、「給料」ここらへんは多くの人が柱として考えるものに なるんじゃないかなぁ、と思います。 私自身も、先ほど挙げた3つは入社してからも大事だなとは感じ

bottom of page