我想做这样的事......
try
{
# Something in this function throws an exception
Backup-Server ...
}catch
{
# Capture stack trace of where the error was thrown from
Log-Error $error
}
理想情况下,我想捕获函数和行号的参数等(就像你在get-pscallstack中看到的那样)
编辑:澄清一下,这是powershell堆栈跟踪我想要的不是.NET一个
任何想法如何实现这一点?
戴夫
答案 0 :(得分:8)
最后一个错误是:
$error[0]
有很多好的信息供你追查,包括异常堆栈跟踪。这是一个小巧的小脚本(PSLCX附带的Resolve-ErrorRecord),它显示了很多关于上一个错误的好信息:
param(
[Parameter(Position=0, ValueFromPipeline=$true)]
[ValidateNotNull()]
[System.Management.Automation.ErrorRecord[]]
$ErrorRecord
)
process {
if (!$ErrorRecord)
{
if ($global:Error.Count -eq 0)
{
Write-Host "The `$Error collection is empty."
return
}
else
{
$ErrorRecord = @($global:Error[0])
}
}
foreach ($record in $ErrorRecord)
{
$record | Format-List * -Force
$record.InvocationInfo | Format-List *
$Exception = $record.Exception
for ($i = 0; $Exception; $i++, ($Exception = $Exception.InnerException))
{
"$i" * 80
$Exception | Format-List * -Force
}
}
}
答案 1 :(得分:1)
您不需要像Keith的答案那样多的代码。
$error[0].ErrorRecord.ScriptStackTrace
是你想要的。