5

私はこのようなことをしたい...

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 で見られるように)
編集: 明確にするために、.NET ではなく、powershell スタック トレースが必要
です。
デイブ

4

2 に答える 2

8

最後のエラーは次の場所にあります。

$error[0]

例外スタック トレースなど、追跡するための有益な情報がたくさんあります。これは、最後のエラーに関する多くの有益な情報を表示する便利な小さなスクリプト (PSCX に同梱されている 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
            }
        }

}
于 2010-03-11T21:40:03.183 に答える
2

キースの答えほど多くのコードは必要ありません。

$error[0].ErrorRecord.ScriptStackTrace

あなたが望むものです。

于 2014-12-25T16:35:03.110 に答える