7. Gérez les erreurs et réduisez les risques

Comprendre les erreurs PowerShell, sécuriser l’exécution automatique : Try/Catch + logs.
Objectifs
  • Comprendre les erreurs PowerShell
  • Sécuriser l’exécution automatique
  • Ajouter Try/Catch et écrire un log d’erreurs
Atelier : partir d’un script volontairement défaillant, le rendre robuste et “prêt à être planifié”.
Compréhension

Fonctionnement des blocs try / catch / finally

Le mécanisme try / catch / finally permet de gérer les erreurs de manière contrôlée et professionnelle, sans interrompre brutalement l’exécution d’un script.

Schéma du fonctionnement des blocs try, catch et finally en PowerShell
Schéma : déroulement de l’exécution avec try / catch / finally
Explication

Lecture du schéma

1. Le bloc try

Le bloc try contient les instructions que PowerShell tente d’exécuter. Tant qu’aucune erreur bloquante n’est détectée, le script continue normalement.

  • Une erreur non bloquante peut être affichée sans arrêter le script
  • Une erreur bloquante déclenche immédiatement le bloc catch

2. Le bloc catch

Le bloc catch est exécuté uniquement si une erreur bloquante survient dans le try.

  • Il permet de traiter l’erreur (message, log, action corrective)
  • Il évite l’arrêt brutal du script
  • L’erreur est accessible via $_

3. Le bloc finally

Le bloc finally est exécuté dans tous les cas :

  • si aucune erreur n’a eu lieu
  • si une erreur a été traitée dans catch

Il est utilisé pour :

  • écrire un message de fin dans un log
  • fermer une ressource
  • afficher un état final du script
À retenir (TSSR) :
  • try = tentative
  • catch = réaction contrôlée à l’erreur
  • finally = nettoyage / traçabilité
Lien avec la pratique

Dans les chapitres précédents, nous avons :

  • manipulé des fichiers et dossiers
  • automatisé des actions de masse
  • préparé des scripts planifiables

Sans try / catch, une simple erreur (fichier manquant, droit insuffisant) pourrait interrompre toute l’automatisation.

La gestion d’erreurs est donc une compétence clé en exploitation.

Script défaillant (exemple)


		# Exemple : chemin invalide
		Get-Content "C:\chemin\inexistant.txt"
      

Problème : si le script est planifié, l’échec doit être tracé (log) et géré.

Version robuste : Try/Catch + log

Principe

  • forcer l’erreur “terminante” : -ErrorAction Stop
  • capturer l’exception : catch
  • écrire dans un fichier log horodaté

Code


			$logDir = "C:\tssr-powershell\logs"
			New-Item -ItemType Directory -Force -Path $logDir | Out-Null
			$ts = Get-Date -Format "yyyyMMdd_HHmmss"
			$logFile = Join-Path $logDir "errors_$ts.log"

			try {
			  $path = Read-Host "Chemin du fichier à lire"
			  $content = Get-Content $path -ErrorAction Stop
			  Write-Output "Lecture OK : $($content.Count) lignes"
			}
			catch {
			  $msg = $_.Exception.Message
			  $line = "$(Get-Date) - ERREUR - $msg"
			  Add-Content -Path $logFile -Value $line
			  Write-Output "Erreur capturée. Log : $logFile"
			}
          
Livrable : script robuste, relançable, avec log d’erreurs exploitable.
Quiz

Auto-évaluation — Erreurs

Q1 — Try/Catch sert à :

Q2 — Pour forcer une erreur “terminante” sur une cmdlet :

Q3 — Dans catch, l’objet d’erreur courant est accessible via :

Q4 — Un log d’erreurs est important car :

Aller à l’exercice récapitulatif