在PowerShell中进行错误处理的正确方法是什么?

sco*_*obi 7 error-handling powershell exception

PowerShell是.bat和.NET的奇怪组合.在.bat中,您可以从命令中检查errorlevel和stderr输出.在.NET中,您可以捕获异常.

cmdlet如何返回错误?当他们失败或他们设置$时,他们会抛出异常吗?代替?这是可配置的吗?

我还假设我在PowerShell中调用的.NET函数将始终抛出异常而不会被shell自动捕获并转换为错误.那是对的吗?

也许我真正应该问的是:什么是一篇优秀的文章?好像很多像我这样有cmd's .bat和.NET经验的工程师都想知道我们应该如何在这个勇敢的新世界中做一些事情.

And*_*der 9

对于单个cmdlet,有一个名为-erroraction的参数.可能的值是SilentlyContinue,Stop,Continue或Inquire.您还可以为这些选项中的任何一个指定名为$ errorpreference的全局变量.

在V1中,您可以使用陷阱关键字.有一篇非常好的,简明的文章描述了在V2中添加的陷阱和try/catch/finally语法之间的主要区别.

下面是一个使用trap语句的快速示例,第一个是特定类型的异常,第二个是一般的catch all error trap

trap {"Other terminating error trapped" }
trap [System.Management.Automation.CommandNotFoundException] 
      {"Command error trapped"}
1/$null
Run Code Online (Sandbox Code Playgroud)