开发者

powershell capture call stack after an error is thrown

开发者 https://www.devze.com 2022-12-23 03:16 出处:网络
I want to do something like this... try { # Something in this function throws an exception Backup-Server ...

I want to do something like this...

try  
{  
    # Something in this function throws an exception
    Backup-Server ...  
}catch  
{  
    # Capture stack trace of where the error was thrown from
    Log-Error $error 
}

Ideally I'd like to capture arguments to the function and line numbers etc. (like you see in get-开发者_JS百科pscallstack)

EDIT: To clarify, it's the powershell stack trace I want not the .NET one

Any ideas how to achieve this?

Dave


The last error is sitting in:

$error[0]

Lots of good info in there for you to chase down including exception stack traces. This is a handly little script (Resolve-ErrorRecord that ships with PSCX) that shows lots of good info about the last error:

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
            }
        }

}


You don't need as much code as Keith's answer.

$error[0].ErrorRecord.ScriptStackTrace

is what you want.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号