стек вызовов захвата PowerShell после возникновения ошибки

StackOverflow https://stackoverflow.com/questions/2428668

Вопрос

Я хочу сделать что-то вроде этого...

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.
Есть идеи, как этого добиться?
Дэйв

Это было полезно?

Решение

Последняя ошибка находится в:

$error[0]

Там много полезной информации, которую вы можете найти, включая трассировку стека исключений.Это небольшой удобный скрипт (Resolve-ErrorRecord, который поставляется с PSCX), который показывает много полезной информации о последней ошибке:

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

}

Другие советы

Вам не нужно столько кода, сколько ответ Кита.

$error[0].ErrorRecord.ScriptStackTrace

это то, что вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top