【问题标题】:Powershell verbose output for chained exceptions链式异常的 Powershell 详细输出
【发布时间】:2011-08-22 02:12:50
【问题描述】:

我是 powershell 新手,我是使用我们的一个自定义 cmdlet 解决问题。默认情况下,在 cmdlet 中引发的所有异常都具有最少的信息,没有堆栈跟踪,也没有关于链式异常的信息。有没有办法启用异常的详细输出?

【问题讨论】:

    标签: powershell powershell-2.0 cmdlets cmdlet


    【解决方案1】:

    这是我从网上某人那里偷来的一个简洁的功能:)。我在我的个人资料中有它,并且很乐意进一步传播它:

    #Get detailed information on an error
    function Resolve-Error ($ErrorRecord=$Error[0])
    {
       $ErrorRecord | Format-List * -Force
       $ErrorRecord.InvocationInfo |Format-List *
       $Exception = $ErrorRecord.Exception
       for ($i = 0; $Exception; $i++, ($Exception = $Exception.InnerException))
       {   "$i" * 80
           $Exception |Format-List * -Force
       }
    }
    

    【讨论】:

    • 谢谢,在这里找到了原始博客:blogs.msdn.com/b/powershell/archive/2006/12/07/…。你知道"$i" * 80 行是做什么的吗?当我调用这个函数时,我得到一个异常:Missing function body in function declaration
    • 感谢您为我找到原件。 "$i" * 80 似乎只是一种格式,用于分隔异常。但是missing function body有点奇怪;这是最近的错误,所以函数做了它应该做的。
    • 我删除了函数参数$ErrorRecord=$Error[0]并在函数体内用$Error[0]替换了$ErrorRecord,一切正常。
    • Kateroh - 我认为$ErrorRecord=$Error[0] 行是将错误隔离到用户变量中,然后另一个错误将当前的$Error[0] 推到$Error[1],或其他地方向下“行"。
    • $ErrorRecord=$Error[0] 是默认值,因此在没有参数的情况下,您仍然可以在函数中使用有效值。
    【解决方案2】:

    我已经使用这种技术来获取嵌套的错误对象:

    $error[0]|format-list -force
    

    【讨论】:

    • 还有一点要理解,错误记录有一个默认格式的红色消息,当错误发生时你会看到。你需要把它变成别的东西才能看到一切。
    【解决方案3】:

    $error 集合包含当前会话中抛出的所有未处理异常的实时列表。最后一个例外是 $error[0]。做这样的事情以尽快捕获错误的好技术:

    ps> invoke-something
    error: ...
    ps> $e = $error[0]
    

    使用 get-member 探索 $e。

    【讨论】:

    • “使用 get-member 探索 $e” - 如何做到这一点将是您回答的一个很好的补充
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2019-06-21
    • 2011-03-20
    • 2012-11-06
    • 2013-06-18
    相关资源
    最近更新 更多