powershell pile d'appel de capture après une erreur est renvoyée
-
19-09-2019 - |
Question
Je veux faire quelque chose comme ça ...
try
{
# Something in this function throws an exception
Backup-Server ...
}catch
{
# Capture stack trace of where the error was thrown from
Log-Error $error
}
Idéalement, je voudrais de saisir des arguments aux numéros de fonction et ligne etc. (comme vous voyez dans get-PSCallStack)
EDIT: Pour clarifier, il est la trace de la pile de Powershell Je veux pas d'une .NET
Toute idée comment y parvenir?
Dave
La solution
La dernière erreur est assis dans:
$error[0]
Beaucoup de bonnes infos là-dedans pour vous pourchasser, y compris les traces de pile d'exception. Ceci est un petit script handly (Resolve-ErrorRecord livré avec PSCX) qui montre beaucoup de bonnes informations sur la dernière erreur:
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
}
}
}
Autres conseils
Vous n'avez pas besoin de code autant que la réponse de Keith.
$error[0].ErrorRecord.ScriptStackTrace
est ce que vous voulez.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow