Question Re:[Tutoriel] La gestion des erreurs sous PowerShell
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6298
- Remerciements reçus 68
il y a 7 ans 10 mois #21317
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Tutoriel] La gestion des erreurs sous PowerShell
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]
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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6298
- Remerciements reçus 68
il y a 1 an 6 mois #32311
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Tutoriel] La gestion des erreurs sous PowerShell
Sous PS 7.3 (Experimental)
PSNativeCommandErrorActionPreference
Native commands with non-zero exit codes issue errors according to $ErrorActionPreference when $PSNativeCommandUseErrorActionPreference is $true
github.com/PowerShell/PowerShell/pull/15897
PSNativeCommandErrorActionPreference
Native commands with non-zero exit codes issue errors according to $ErrorActionPreference when $PSNativeCommandUseErrorActionPreference is $true
github.com/PowerShell/PowerShell/pull/15897
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.110 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- Re:[Tutoriel] La gestion des erreurs sous PowerShell