PowerShell 尝试/捕获/最后
我最近编写了一个运行良好的 PowerShell 脚本 - 然而,我现在想升级该脚本并添加一些错误检查/处理 - 但我似乎被第一个障碍难住了。为什么下面的代码不起作用?
try {
Remove-Item "C:\somenonexistentfolder\file.txt" -ErrorAction Stop
}
catch [System.Management.Automation.ItemNotFoundException] {
"item not found"
}
catch {
"any other undefined errors"
$error[0]
}
finally {
"Finished"
}
错误在第二个 catch 块中被捕获 - 您可以看到 $error[0]
的输出。显然我想在第一个块中捕获它。我缺少什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
-ErrorAction Stop
正在为您改变一切。尝试添加这个并看看你会得到什么:-ErrorAction Stop
is changing things for you. Try adding this and see what you get:这很奇怪。
我检查了
ItemNotFoundException
的基类,并测试了以下多个catch
es,看看会捕获它:事实证明,输出是
'RuntimeException'
。我还尝试使用不同的异常CommandNotFoundException
:正确输出
'CommandNotFoundException'
。我依稀记得在其他地方读过(尽管我再也找不到)有关此问题的内容。在异常过滤无法正常工作的情况下,他们会捕获最接近的
Type
,然后使用switch
。下面的代码只是捕获Exception
而不是RuntimeException
,但它与我的第一个示例的switch
等效,该示例检查ItemNotFoundException< 的所有基本类型/code>:
这会写入
'ItemNotFound'
,正如它应该的那样。That is very odd.
I went through
ItemNotFoundException
's base classes and tested the following multiplecatch
es to see what would catch it:As it turns out, the output was
'RuntimeException'
. I also tried it with a different exceptionCommandNotFoundException
:That output
'CommandNotFoundException'
correctly.I vaguely remember reading elsewhere (though I couldn't find it again) of problems with this. In such cases where exception filtering didn't work correctly, they would catch the closest
Type
they could and then use aswitch
. The following just catchesException
instead ofRuntimeException
, but is theswitch
equivalent of my first example that checks all base types ofItemNotFoundException
:This writes
'ItemNotFound'
, as it should.