-
01 - Introduction à Powershell
-
02 - Commandes de base Powershell
-
03 - Navigation dans le système
-
04 - Gestion des utilisateurs locaux
-
05 - Les bases du scripting Powerhshell
-
06 - Gestion des utilisateurs Active Directory
-
07 - Automatisation des taches de gestion utilisateurs
-
08 - Automatisation des processus système
-
09 - Script de maintenance serveur
-
10 - Gestion avancée en PowerShell
-
11 - Formater les sorties des scripts
-
12 - Gestion des fichiers de log
-
13 - Etude de cas - Automatisation de taches courantes
-
14 - Optimisation des scripts et bonnes pratiques
-
16 - Algorithmie et Powershell
-
QCM de fin de parcours
14.4 Synthèse et bonnes pratiques
4. Bonnes pratiques et optimisations avancées
4.1. Résumé des bonnes pratiques
| Pratique | Description |
|---|---|
| Documentation | Utilisez des blocs .SYNOPSIS, .DESCRIPTION, et .EXAMPLE. |
| Modularité | Séparez la logique en fonctions/modules réutilisables. |
| Gestion des erreurs | Utilisez try/catch et ErrorAction. |
| Logging | Journalisez les actions et erreurs avec des niveaux de gravité. |
| Paramètres | Utilisez des paramètres pour rendre les scripts flexibles. |
| Validation | Validez les entrées avec ValidateScript, ValidateSet. |
| Tests | Testez les scripts dans un environnement non productif. |
| Performance | Évitez les boucles inutiles, utilisez le pipeline. |
| Sécurité | Ne stockez pas les mots de passe en clair. |
| Compatibilité | Testez sur différentes versions de PowerShell/Windows. |
4.2. Optimisations avancées
4.2.1. Utilisation du pipeline pour la performance
# Exemple non optimisé (boucle foreach)
$users = Import-Csv -Path "C:\Temp\Users.csv"
foreach ($user in $users) {
New-ADUser -Name "$($user.Prenom) $($user.Nom)" -SamAccountName $user.Identifiant
}
# Exemple optimisé (pipeline)
Import-Csv -Path "C:\Temp\Users.csv" | ForEach-Object {
New-ADUser -Name "$($_.Prenom) $($_.Nom)" -SamAccountName $_.Identifiant
}
Explications :
- Le pipeline est plus efficace pour traiter des collections.
4.2.2. Parallelisation avec ForEach-Object -Parallel (PowerShell 7+)
# Nécessite PowerShell 7+
$users = Import-Csv -Path "C:\Temp\Users.csv"
$users | ForEach-Object -Parallel {
New-ADUser -Name "$($_.Prenom) $($_.Nom)" -SamAccountName $_.Identifiant
} -ThrottleLimit 5
Explications :
- -Parallel : Exécute les opérations en parallèle (plus rapide pour les grandes listes).
- -ThrottleLimit : Limite le nombre de threads simultanés.
4.2.3. Utilisation de Splatting pour les paramètres
# Sans splatting
New-ADUser -Name "Jean Dupont" -SamAccountName "jdupont" -Enabled $true -Path "OU=Utilisateurs,DC=domaine,DC=local"
# Avec splatting
$userParams = @{
Name = "Jean Dupont"
SamAccountName = "jdupont"
Enabled = $true
Path = "OU=Utilisateurs,DC=domaine,DC=local"
}
New-ADUser @userParams
Explications :
- @userParams : Passe un dictionnaire de paramètres à la cmdlet.
- Lisibilité : Plus clair pour les appels avec beaucoup de paramètres.
4.3. Exercices d’approfondissement
- Optimisation des performances :
- Comparez les temps d’exécution d’un script avec et sans pipeline/parallelisation.
- Intégration avec des API :
- Étendez un script pour interagir avec une API REST (ex: Microsoft Graph pour Office 365).
- Tests unitaires :
- Utilisez Pester pour écrire des tests unitaires pour vos fonctions.
Install-Module -Name Pester -Force Describe "Test de la fonction Create-ADUser" { It "Doit créer un utilisateur avec succès" { $user = @{ Prenom = "Test"; Nom = "User"; Identifiant = "tuser" } $result = Create-ADUser -UserData $user -ErrorAction SilentlyContinue $result | Should -Not -BeNullOrEmpty } } - Déploiement continu :
- Automatisez le déploiement de vos scripts avec Azure DevOps ou GitHub Actions.
Les commentaires ne sont pas activés sur ce cours.