Question [Tutoriel] La gestion des erreurs sous PowerShell

Plus d'informations
il y a 4 ans 10 mois #21317 par Laurent Dardenne
Le framework 4.5 propose deux classes d'aide autour de la gestion d'exceptions.
La première est liée à un événement du CLR exécuté avant le déclenchement d'une exception, la seconde permet de capturer une exception dans une partie de code et de la rédéclencher dans une autre partie.

1- Utilise la fonction Write-Properties :
[code:1]
$Error.Clear()
try {[Int]'Test' }catch {}
#Aucune affichage et l'exception est enregistrée.
$Error


$DomainEvents = [AppDomain]::CurrentDomain
#Ce n'est pas un gestionnaire d'exception, mais une notification
$Action={
#Filtre sur un type. Sinon on affiche toutes les exceptions du domaine d'application (la session PS)
if ($EventArgs.Exception -is [System.Management.Automation.PSInvalidCastException])
{
Write-Warning \"Event\"; wp $Event
Write-Warning \"Eventargs\"; wp $EventArgs.exception
}
}
#Evénement statique
$timeChanged = Register-ObjectEvent -InputObject $DomainEvents –EventName 'FirstChanceException' -Action $Action

#S'il existe un breakpoint sur cette ligne, il est déclenché AVANT le gestionnaire d'événement 'FirstChanceException'
[Int]'Test'


$Error.Clear()
try {[Int]'Test' }catch {}
#Déclenchement du gestionnaire d'événement, ici aussi l'exception est enregistrée.
$Error
[/code:1]
Peut servir à logguer toutes les exceptions.

2 -Capture d'exception
[code:1]
Function Test {
$MyException = $null
try
{ [Int]'Test' }
catch
{ $MyException = [System.Runtime.ExceptionServices.ExceptionDispatchInfo]::Capture($_.Exception) }

#Redéclenchement hors du bloc try/catch
if ($MyException -ne $null)
{ $MyException.Throw() }
}

# Code en deux parties
$global:MyException = $null

Function Test {
try
{ [Int]'Test' }
catch
{ $global:MyException = [System.Runtime.ExceptionServices.ExceptionDispatchInfo]::Capture($_.Exception) }
}

function reThrow {
#Redéclenchement hors de la fonction d'origine
#Mais on ne connait pas l'origine du code source Powershell
if ($global:MyException -ne $null)
{ $global:MyException.Throw() }
}
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.184 secondes
Propulsé par Kunena