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

Exception 在PowerShell中执行错误处理的正确方法是什么?,exception,powershell,error-handling,Exception,Powershell,Error Handling,PowerShell是.bat和.NET的奇怪组合。在.bat中,检查来自命令的errorlevel和stderr输出。在.NET中,您捕获异常 cmdlet如何返回错误?他们是在失败时抛出异常还是设置了$?相反这是可配置的吗 我还假设我在PowerShell中调用的.NET函数总是抛出异常,不会被shell自动捕获并转换为错误。对吗 也许我真正应该问的是:什么是一篇好的文章,它涵盖了所有这些?似乎有很多工程师和我一样,在CMD的工作中有经验。BAT和.NET都在想我们应该如何在这个勇敢的新世界

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

cmdlet如何返回错误?他们是在失败时抛出异常还是设置了$?相反这是可配置的吗

我还假设我在PowerShell中调用的.NET函数总是抛出异常,不会被shell自动捕获并转换为错误。对吗


也许我真正应该问的是:什么是一篇好的文章,它涵盖了所有这些?似乎有很多工程师和我一样,在CMD的工作中有经验。BAT和.NET都在想我们应该如何在这个勇敢的新世界里做事情。在.Net中工作的大多数概念都应该在Posh中工作

对于错误处理,可以使用Try..catch。还可以“捕获”错误,并指定您自己的一组在错误条件下执行的指令

我强烈推荐内置帮助:

Get-Help about_Errors
Get-Help about_Trap

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

在V1中,可以使用trap关键字。有一个例子描述了陷阱和V2中添加的try/catch/finally语法之间的主要区别

下面是一个使用陷阱语句的快速示例,第一个用于指定类型的异常,第二个是通用的捕获所有错误陷阱

trap {"Other terminating error trapped" }
trap [System.Management.Automation.CommandNotFoundException] 
      {"Command error trapped"}
1/$null

所以,它可能在V2CTP3中被删除了,但没有关于\u错误或关于\u陷阱的内容。你的回答概括了我的问题的来源。。Posh是.NET-y,我知道try-catch等,但它并不能真正帮助回答我的任何问题。全局变量的名称是$ErrorActionPreference,而不是$errorpreference: