Sam*_*abu 8 powershell exception
在PowerShell中,throw $ErrorMsg和之间有什么区别$PScmdlet.ThrowTerminatingError($ErrorMsg)?
它们是相同还是不同?如果它们不同哪一个更好?
mkl*_*nt0 12
Throw创建脚本 -终止(运行空间终止)错误,同时$PScmdlet.ThrowTerminatingError()创建一个语句终止错误.
注意:这些不是官方术语(文档目前只是模糊地引用抽象中的终止错误,没有范围),但它们对描述事实上的行为很有用.
简而言之:默认情况下,
一个脚本 -terminating错误终止的整个运行空间,即运行脚本及其所有调用,以获取执行没有进一步的陈述.
try/ catch语句(或者不常见的是trap语句).而一个语句 -终止错误只会终止当前语句(函数调用$PScmdlet.ThrowTerminatingError()和它所属的语句,通常是一个管道),并继续执行下一个语句.
他们也可以被截获try/ catch(或trap),或忽视与$ErrorActionPreference设置选项变量SilentlyContinue; 相比之下,-ErrorAction常见的参数有没有对他们的影响.
相反,尽管文档声称仅涉及非终止错误,但第3种错误类型,您可以将它们提升为脚本终止错误.$ErrorActionPreference = 'Stop'$ErrorActionPreference
有关更多信息,请参阅PowerShell错误处理的此(非官方)概述.
至于何时使用哪种类型的错误的指导:
关于何时Throw在about_Throw帮助主题中使用,几乎没有什么指导 ; 给出了一个示例用例,其中Throw用于在没有强制参数的情况下中止函数/脚本,作为PowerShell 提示它的默认行为的替代方法.
Throw,即抛出脚本 -终止错误会终止整个运行空间(正在运行的脚本及其任何调用者),除非被捕获.该Cmdlet的错误报告本文只讨论cmdlet的内部使用相对于何时报告陈述 -terminating(在文章就叫"终止")与无穷的错误.
鉴于后者,您可以认为高级函数 - 因为它们就像cmdlet一样 - 最多应该报告语句 -终止错误并且Throw(脚本 -终止错误)应该仅限于脚本,但请注意这与Throw强制执行的使用相矛盾强制参数.
也许脚本 -终止和声明 -终止错误之间的问题区别最终是无意的,也许最初的意图是只有脚本 -终止它们,这可以解释为什么所有当前文档只讨论在抽象中终止错误,没有甚至提到了区别.
| 归档时间: |
|
| 查看次数: |
916 次 |
| 最近记录: |