从远程会话获取完整堆栈跟踪

时间:2014-06-10 15:49:10

标签: session powershell powershell-v3.0 invoke-command

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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