Se rendre au contenu
Contenu du cours

14.4 Synthèse et bonnes pratiques

4. Bonnes pratiques et optimisations avancées

4.1. Résumé des bonnes pratiques

PratiqueDescription
DocumentationUtilisez des blocs .SYNOPSIS, .DESCRIPTION, et .EXAMPLE.
ModularitéSéparez la logique en fonctions/modules réutilisables.
Gestion des erreursUtilisez try/catch et ErrorAction.
LoggingJournalisez les actions et erreurs avec des niveaux de gravité.
ParamètresUtilisez des paramètres pour rendre les scripts flexibles.
ValidationValidez les entrées avec ValidateScript, ValidateSet.
TestsTestez 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

  1. Optimisation des performances :
    • Comparez les temps d’exécution d’un script avec et sans pipeline/parallelisation.
  2. Intégration avec des API :
    • Étendez un script pour interagir avec une API REST (ex: Microsoft Graph pour Office 365).
  3. 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
        }
    }
    
  4. 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.