我们都听说过PowerShell有两种类型的错误:终止和非终止错误。
描述非终止错误的原因是它只是输出到错误流并允许脚本继续执行。但是,它不能被try / catch捕获,因为实际上没有例外被抛出。
对于终止错误,它都将错误输出到错误流,如果未处理,则完全停止其轨道上的脚本,防止执行错误的行下方的任何内容。它可以通过尝试/捕获来捕获。
然而,似乎存在第三种类型的错误,我似乎无法找到有关的信息或名称。
这是一个错误,它是终止和非终止错误之间的混合......当生成时,它不会终止脚本,给它一个非终止错误的属性,但它可以是被try / catch捕获,它给出了终止错误的属性!
它可能是最基本的错误类型。它本身直接抛出异常,而不是由PowerShell的函数或cmdlet抛出。
几个例子:
'a'.Split([object[]])
问题是,这些被称为什么,为什么它们与其他两种类型不同?该对象仍然是一个ErrorRecord,而不是Exception,所以它们应该像终止或非终止错误,而不是两者的突变。
答案 0 :(得分:1)
微软没有特殊名称"它",即使您需要设置$ErrorActionPreference = "Stop"
以使它们对终止错误的行为相同,它们也只是将其称为终止错误会(停止剧本)。
因为Windows PowerShell无法识别" nonsenseString"作为一个 cmdlet或其他项,它返回 CommandNotFoundException 错误。 此终止错误被特定的陷阱语句捕获。
以下脚本示例包含相同的Trap语句 一个不同的错误:
trap {"Other terminating error trapped" } trap [System.Management.Automation.CommandNotFoundException] {"Command error trapped"} 1/$null
运行此脚本会产生以下结果:
Other terminating error trapped Attempted to divide by zero. At C:PS> errorX.ps1:3 char:7 + 1/ <<<< $null
尝试除以零不会创建 CommandNotFoundException错误。相反,该错误被困住了 另一个Trap语句,它会捕获任何终止错误。