【问题标题】:Get full stack trace from remote session从远程会话获取完整的堆栈跟踪
【发布时间】:2014-07-31 11:26:59
【问题描述】:

我在远程会话下使用 Invoke-Expression,当抛出异常时 - 它只返回 RemoteException 而没有任何堆栈跟踪信息。 示例:

try
{
    Invoke-Expression "$command 2>&1"
}    
catch
{
    Write-Host $_    
}

如果我将重定向错误排除到输出(2>&1) - 我得到了正确的错误,但它调用了不需要的调试控制台(来自 $command),它使用重定向隐藏。

Start-Process -NoNewWindow -FilePath $CmdExe -ArgumentList $Arguments

使用 Start-Process 我可以看到完整的堆栈跟踪,但也有不需要的调试控制台。

如何从远程会话下抛出的异常中获取完整的堆栈跟踪和正确的异常? 谢谢。

【问题讨论】:

    标签: session powershell powershell-3.0 invoke-command


    【解决方案1】:

    如果您正在进行远程会话,请不要使用 write-host。试试这个:

    catch { 
        Write-Error ($_ | fl * -force | out-string)
    }
    

    另一个选项是不捕获异常,让错误传播回本地会话。但我怀疑你想尝试恢复?

    【讨论】:

    • 谢谢基思,不,我不想恢复,我只需要得到一个错误来定义真正的原因。在您的示例中,我看到了有关远程异常的完整信息,而没有看到真正的异常(应该是 xml 结构被破坏的信息)
    • 尝试将fl 更改为fc(格式-自定义)。这将跟随嵌套对象(如 Exception.InnerException)向下四级。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2015-05-14
    相关资源
    最近更新 更多