テストコード
$ErrorActionPreference = "Stop"
# 存在しないファイル
$file = "aaa.log"
try {
"Remove-Item $file" | Out-Host
Remove-Item $file
} catch {
"エラー発生1" | Out-Host
}
try {
"Remove-Item $file -Verbose" | Out-Host
Remove-Item $file -Verbose
} catch {
"エラー発生2" | Out-Host
}
try {
"Remove-Item $file -Verbose -ErrorAction Stop" | Out-Host
Remove-Item $file -Verbose -ErrorAction Stop
} catch {
"エラー発生3" | Out-Host
}
"処理終了" | Out-Host
実行結果
Remove-Item aaa.log
エラー発生1
Remove-Item aaa.log -Verbose
Remove-Item : パス 'C:¥aaa.log' が存在しないため検出できません。
発生場所 C:¥Users¥nonaka¥Desktop¥remove-item_error.ps1:15 文字:5
+ Remove-Item $file -Verbose
+ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+ CategoryInfo : ObjectNotFound: (C:¥aaa.log:String) [Remove-Item
], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.Remov
eItemCommand
Remove-Item aaa.log -Verbose -ErrorAction Stop
エラー発生3
処理終了
Remove-Item
に-Verbose
を指定すると、$ErrorActionPreference
にStop
を指定しているのに、2番目のように例外がキャッチできなくなる。3番目のように-ErrorAction Stop
を個別に指定すると例外がキャッチできる。
~~Copy-Item
に-Verbose
指定しても、この現象は起きない。~~改めて確認したところ、Copy-Item
でも同じ現象が発生した。特定のコマンドレットによらない模様。(詳細はコメント欄参照。)