PowerShell是.bat和.NET的奇怪组合。在.bat中,您可以从命令中检查errorlevel和stderr输出。在.NET中,您可以捕获异常。
cmdlet如何返回错误?当他们失败或他们设置$时,他们会抛出异常吗?代替?这是可配置的吗?
我还假设我在PowerShell中调用的.NET函数将始终抛出异常而不会被shell自动捕获并转换为错误。这是对的吗?
也许我真正应该问的是:什么是一篇很好的文章来讨论这一切?好像很多像我这样有cmd's .bat和.NET经验的工程师都想知道我们应该如何在这个勇敢的新世界中做一些事情。
答案 0 :(得分:9)
对于单个cmdlet,有一个名为-erroraction的参数。可能的值是SilentlyContinue,Stop,Continue或Inquire。您还可以为这些选项中的任何一个指定名为$ errorpreference的全局变量。
在V1中,您可以使用陷阱关键字。有一个pretty good, concise article描述了在V2中添加的陷阱和try / catch / finally语法之间的主要区别。
以下是使用陷阱语句的快速示例,第一个是特定类型的异常,第二个是通用捕获所有错误陷阱
trap {"Other terminating error trapped" }
trap [System.Management.Automation.CommandNotFoundException]
{"Command error trapped"}
1/$null
答案 1 :(得分:0)
我认为Posh是全部.Net。在.Net中工作的大多数概念应该在Posh中起作用。
对于错误处理,您可以使用Try..catch。也可以“捕获”错误并指定您自己的指令集以在错误条件下执行。
我强烈推荐内置帮助:
Get-Help about_Errors
Get-Help about_Trap