Powershell 2:如何确定cmdlet可以抛出的异常?

时间:2011-09-07 18:36:45

标签: exception powershell error-handling

回到我(有限的)java编程时代,我记得这个很好的功能,如果我试图进行可能引发异常的调用,java会要求我处理该异常或将其传递给可能的东西。 / p>

无论如何,我正在写一段与Active Directory中的对象混淆的PowerShell代码,所以我想要非常非常小心。我偶尔会遇到远程超时错误,这引出了我更普遍的问题:

“我怎么能提前知道这些cmdlet中哪些可以抛出表示危险情况的异常,以及那些可能的异常列表是什么?”

我想知道每个cmdlet的异常列表是否太长而无法解决所有可能性。我也不想只编写一个通用的异常处理程序,因为PowerShell似乎在错误处理的一般意义上做得很好。

根据每个cmdlet确定可能发生的所有异常的列表的最佳方法是什么?这甚至可行/可行吗?

谢谢!

1 个答案:

答案 0 :(得分:7)

嘿,我觉得你从那里开始走错了路。陪审团非常关注Java的检查异常是否是一个好主意。

那就是说,你问的很难回答。在Java中,编译器通过静态分析很清楚抛出什么方法(或者至少他们声明它们会抛出什么异常);这是一个仅存在于编译器进程空间中的封闭系统。在分布式异构系统的现实世界中,没有通用的检查异常框架。 PowerShell cmdlet存在于win32进程中的.NET应用程序域的域中,但是它们使用诸如Active Directory之类的obtuse协议与外部服务器上的支持系统进行通信,这些协议在实现和一般概念上都是分开的。特殊条件可能会从一个域“流动”到另一个域,但它们会在它们冒泡到你之前向所有方向扭曲,包裹和捣乱,这是控制台上的不良用户。简而言之,答案是否定的。通用Cmdlets(get-item,get-childitem)不知道底层提供者系统导致错误的倾向,也不能可靠地知道这一点。

但是,如果您有一个专用的Active Directory模块(如Microsoft的ActiveDirectory模块或Quest的QAD模块),那么他们可能已经列出了在支持系统中出现异常情况时其cmdlet将出现的异常。可以在模块(或管理单元)帮助文件中或基于每个cmdlet找到此帮助(最有可能)。尝试运行以下命令:

ps> get-help do-something -full | more

这将显示完整的调用语法以及开发人员感觉良好足以祝福你的任何注释。特别注意页脚;在这里,您通常会找到一个更常见的帮助主题,例如“about_thesecmdlets”,您可以查看:get-help about_thesecmdlets

希望这有帮助。