exception - 电源外壳 2 : How to determine what exceptions a cmdlet can throw?

标签 exception powershell error-handling

回到我(有限的)Java 编程时代,我记得这个不错的功能,如果我尝试进行可能引发异常的调用,Java 将要求我处理该异常或将其传递给可能的东西。

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

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

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

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

谢谢!

最佳答案

呵呵,我觉得你一开始就走错了路。对于 Java 的检查异常是否是一个好主意,陪审团非常不同意。

也就是说,你问的问题很难回答。在 Java 中,通过静态分析,编译器可以清楚地知道哪些方法抛出(或至少它们声明它们将抛出什么)哪些异常;这是一个仅存在于编译器进程空间中的封闭系统。在分布式异构系统的现实世界中,没有通用的检查异常框架。 PowerShell cmdlet 存在于 win32 进程中的 .NET appdomain 域中,但它们使用诸如 Active Directory 之类的钝协议(protocol)与外部服务器上的支持系统通信,这些协议(protocol)在实现和一般概念上都截然不同。异常情况可能会从一个域“流动”到下一个域,但它们会在向您(控制台上的可怜用户)冒泡之前向各个方向扭曲、包裹和糊状。简而言之,答案是否定的。通用 Cmdlet(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
希望这可以帮助。

关于exception - 电源外壳 2 : How to determine what exceptions a cmdlet can throw?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7338826/

相关文章:

java - 如何捕获 SWT 事件循环中的未经检查的异常

powershell - 根据字段条件过滤 PSCustomObject 值

powershell - PowerShell 是强类型语言吗?

powershell - 为什么我的PowerShell结果重复?

android - 您的项目包含错误Eclipse Red惊叹号在项目

cakephp - 自定义错误页面未显示

c++ - 正确替换 C++ 中缺失的 'finally'

java - 使用 osmdroid 泄露 IntentReceiver 异常

exception - RISC-V 从带有压缩指令的异常处理程序返回

javascript - 使用 ajaxError 全局处理程序显示 HTTP 状态代码 401 详细信息