Comment créer et lancer une nouvelle exception dans PowerShell
- Créer une classe d’exception personnalisée
-
Utilisez l’instruction
throw
pour lancer une exception personnalisée - Gérer les exceptions personnalisées
- Conclusion

La gestion des exceptions est un aspect essentiel de l’écriture de scripts PowerShell robustes et fiables. En créant et en lançant des exceptions, vous pouvez communiquer efficacement les erreurs et les problèmes qui peuvent survenir lors de l’exécution du script.
Bien que PowerShell offre plusieurs types d’exceptions intégrés, il existe des scénarios où vous devez créer et lancer votre propre exception pour adapter la gestion des erreurs aux besoins spécifiques de votre script.
Dans cet article, nous allons explorer le processus de création et de lancement d’exceptions personnalisées dans PowerShell, en fournissant un exemple détaillé et des résultats.
Créer une classe d’exception personnalisée
Avant de plonger dans les exceptions personnalisées, examinons brièvement le concept d’exceptions en programmation.
Une exception est un événement inattendu ou une erreur qui perturbe le flux normal d’un programme. Lorsqu’une exception se produit, le contrôle est transféré à un bloc de code désigné pour la gestion des exceptions, ce qui permet une gestion élégante des erreurs.
PowerShell fournit une variété de types d’exceptions intégrés, tels que System.Management.Automation.CmdletInvocationException
, System.IO.IOException
et System.Exception
, pour gérer les erreurs courantes. Cependant, créer des exceptions personnalisées est bénéfique lorsque vous rencontrez des cas d’erreur spécifiques ou que vous souhaitez fournir des messages d’erreur clairs et informatifs aux utilisateurs.
Pour créer une exception personnalisée dans PowerShell, vous commencez par définir une nouvelle classe d’exception qui hérite de la classe de base [System.Exception]
. Vous pouvez ensuite ajouter des propriétés et des méthodes pour personnaliser le comportement de votre exception.
Illustrons cela avec un exemple pratique :
class MyCustomException : [System.Exception] {
MyCustomException() {
}
MyCustomException([string] $message) {
$this.Message = $message
}
[string] GetMessage() {
return "Custom Exception: $($this.Message)"
}
}
Dans cet exemple, nous créons une classe d’exception personnalisée nommée MyCustomException
. La classe MyCustomException
hérite de la classe de base [System.Exception]
.
Ensuite, deux constructeurs sont définis : un constructeur par défaut sans arguments et un autre constructeur qui accepte un message d’erreur personnalisé.
Enfin, nous incluons une méthode GetMessage
pour retourner un message d’erreur formaté. Cette méthode peut être utile pour fournir des détails spécifiques lors de la gestion de l’exception.
Utilisez l’instruction throw
pour lancer une exception personnalisée
Une fois que vous avez défini votre classe d’exception personnalisée, vous pouvez la lancer dans votre script en utilisant l’instruction throw
. Pour ce faire, créez une instance de votre exception personnalisée et passez le message d’erreur pertinent.
Voici un exemple qui démontre comment lancer une exception personnalisée :
try {
# Simulate code that may cause an error
$result = 1 / 0
}
catch {
$errorMessage = "An error occurred: $($_.Exception.Message)"
throw [MyCustomException]::new($errorMessage)
}
Dans un bloc try
, nous créons intentionnellement une erreur en essayant de diviser par zéro.
Dans le bloc catch
, nous capturons l’erreur, créons un message d’erreur personnalisé, puis lançons une instance de MyCustomException
contenant ce message d’erreur.
Gérer les exceptions personnalisées
Gérer des exceptions personnalisées est similaire à gérer des exceptions intégrées dans PowerShell. Vous pouvez utiliser des blocs try
, catch
et finally
pour gérer les erreurs de manière élégante.
Voici un exemple qui démontre la capture et la gestion d’une exception personnalisée :
try {
# Simulate code that may cause an error
$result = 1 / 0
}
catch [MyCustomException] {
Write-Host "Custom Exception Caught: $($_.Exception.Message)"
}
catch {
Write-Host "Other Exception Caught: $($_.Exception.Message)"
}
Dans ce code, nous tentons de diviser par zéro dans le bloc try
. Le premier bloc catch
capture spécifiquement la MyCustomException
et affiche un message indiquant qu’une exception personnalisée a été capturée, ainsi que le message d’erreur personnalisé que nous avons fourni.
Si d’autres exceptions se produisent, le second bloc catch
, qui sert de gestionnaire d’exceptions générique, les capture et affiche un message différent.
Exécutons le script et voyons le résultat :
Custom Exception Caught: An error occurred: Attempted to divide by zero.
Dans cet exemple, nous déclenchons intentionnellement une erreur en essayant de diviser par zéro dans le bloc try
. Le bloc catch
pour la classe MyCustomException
capture l’erreur et affiche un message indiquant Custom Exception Caught
.
De plus, il fournit le message d’erreur personnalisé : Une erreur est survenue : tentative de division par zéro
. Si d’autres exceptions s’étaient produites, elles auraient été capturées par le bloc catch
générique, mais cela n’est pas applicable dans cet exemple.
Voici le code PowerShell complet pour créer et lancer une exception personnalisée, ainsi qu’un exemple de comment la gérer :
class MyCustomException : [System.Exception] {
MyCustomException() {
}
MyCustomException([string] $message) {
$this.Message = $message
}
[string] GetMessage() {
return "Custom Exception: $($this.Message)"
}
}
try {
# Simulate code that may cause an error (division by zero)
$result = 1 / 0
}
catch {
$errorMessage = "An error occurred: $($_.Exception.Message)"
throw [MyCustomException]::new($errorMessage)
}
try {
# Simulate code that may cause another error (e.g., accessing a non-existent variable)
$nonExistentVariable = $undefinedVariable
}
catch [MyCustomException] {
Write-Host "Custom Exception Caught: $($_.Exception.Message)"
}
catch {
Write-Host "Other Exception Caught: $($_.Exception.Message)"
}
Ce code affichera le résultat de la gestion des exceptions, faisant la distinction entre l’exception personnalisée et d’autres exceptions.
Conclusion
Créer et lancer des exceptions personnalisées dans PowerShell vous permet de fournir des messages d’erreur plus informatifs et améliore la fiabilité et la maintenabilité de vos scripts. Ces exceptions personnalisées vous aident à adapter la gestion des erreurs aux exigences spécifiques de votre script, garantissant une expérience utilisateur plus fluide et de meilleures capacités de dépannage.