Skip to content

Module 5: -WhatIf Religieux - Pourquoi -WhatIf est Sacré

Durée: 1h30 | Prérequis: Modules 1-4 complétés

🎯 Objectif de ce Module

À la fin: -WhatIf sera gravé dans votre ADN d'administrateur. Vous ne pourrez plus physiquement exécuter une commande destructive sans -WhatIf d'abord.


🛐 La Religion -WhatIf

Les 10 Commandements de -WhatIf

  1. Tu utiliseras -WhatIf avant toute commande destructive
  2. Tu ne feras pas confiance même à tes propres scripts
  3. Tu vérifieras la portée de tes actions avant exécution
  4. Tu documenteras ce que -WhatIf te montre
  5. Tu n'exécuteras jamais un Remove-* sans -WhatIf d'abord
  6. Tu garderas ton sang-froid même sous pression
  7. Tu évangéliseras -WhatIf à tes collègues
  8. Tu n'auras pas honte de double-vérifier
  9. Tu considéreras -WhatIf comme sauveur de carrière
  10. Tu te souviendras que vendredi 17h = moment le plus dangereux

💀 Hall of Fame des Désastres Sans -WhatIf

🏆 Podium des Catastrophes Légendaires

🥇 1ère Place: L'Effaceur d'Exchange (2019)

# Ce qui était prévu:
Get-Mailbox -ResultSize 10 | Remove-Mailbox

# Ce qui fut exécuté:
Get-Mailbox -ResultSize Unlimited | Remove-Mailbox
Résultat: 15,000 boîtes mail supprimées Coût: €2.3M + 3 jours de restauration Carrière: Terminée

🥈 2ème Place: Le Videur d'OU (2021)

# Intention: nettoyer OU test
Remove-ADOrganizationalUnit -Identity "OU=Test,DC=company,DC=com" -Recursive

# Réalité: Variable mal définie pointait vers OU=Users
Remove-ADOrganizationalUnit -Identity $ouToDelete -Recursive
# $ouToDelete contenait "OU=Users,DC=company,DC=com" ☠️
Résultat: 8,000 comptes utilisateurs supprimés Coût: Weekend entier + consultants urgence Leçon: -WhatIf aurait montré le contenu de $ouToDelete

🥉 3ème Place: Le Déménageur Fou (2022)

# Script de migration développeurs → nouvelle OU
Get-ADUser -Filter {Department -eq "Dev"} | Move-ADObject -TargetPath $newOU

# Problème: $newOU était vide (string null)
# Résultat: Tous les devs déplacés vers racine du domaine
Résultat: Permissions cassées, applications down Récupération: 12h de travail manuel Ironie: -WhatIf aurait montré "TargetPath: DC=company,DC=com"


🎪 Simulacre en Direct: "Vendredi 16h58 - Le Piège"

Scenario

L'instructeur joue le rôle de l'admin sous pression

📧 Email urgent reçu à 16h55:

De: directeur.general@maxtec.be
À: admin@maxtec.be
Sujet: URGENT - Réunion lundi 8h avec clients japonais

Salut,

Peux-tu créer rapidement le groupe "GG-EU-Clients-Japon" et y ajouter
toute l'équipe commerciale ? Réunion critique lundi matin.

Merci !
DG

🧠 Monologue interne de l'admin: "16h58... le boss attend... script simple... pas besoin de -WhatIf pour une création de groupe..."

Le Script "Rapide"

# Script ultra-rapide - juste avant le weekend
New-ADGroup -Name "GG-EU-Clients-Japon" -GroupScope Global -GroupCategory Security -Path "OU=Groups,OU=Ventes,OU=EU,DC=maxtec,DC=be"

# Ajouter toute l'équipe Ventes
Get-ADUser -Filter {Department -eq "Ventes"} | ForEach-Object {
    Add-ADGroupMember -Identity "GG-EU-Clients-Japon" -Members $_.SamAccountName
}

Write-Host "✅ Groupe créé et membres ajoutés!" -ForegroundColor Green

L'Exécution "Sans Problème"

PS C:\> .\create-japan-group.ps1
New-ADGroup : The specified group already exists
Add-ADGroupMember : Cannot find an object with identity: 'GG-EU-Clients-Japon'
Add-ADGroupMember : Cannot find an object with identity: 'GG-EU-Clients-Japon'
Add-ADGroupMember : Cannot find an object with identity: 'GG-EU-Clients-Japon'
 Groupe créé et membres ajoutés!

🤔 Réaction de l'admin: "Quelques erreurs mais le message final est vert... ça a marché !"

Le Réveil Brutal - Lundi 8h15

☎️ Appel DG: "PERSONNE de l'équipe Ventes ne peut accéder au dossier clients !"
☎️ Appel Responsable IT: "Les groupes Ventes ont disparu !"
☎️ Appel Sécurité: "Tentatives de connexion échouées en masse !"

L'Enquête Forensique

# Que s'est-il VRAIMENT passé ?
Get-ADGroup -Filter {Name -like "*Japon*"}
# Résultat: Aucun groupe trouvé

# Chercher dans les logs d'événements
Get-WinEvent -LogName Security | Where-Object {$_.Id -eq 4728}
# Découverte: Le groupe existait déjà... et a été SUPPRIMÉ par erreur

La Vérité Cachée

Le script avait un bug caché: 1. Groupe existait déjà → New-ADGroup a échoué 2. Variable $groupe mal initialisée dans une version antérieure 3. Add-ADGroupMember a tenté d'ajouter à un groupe inexistant 4. MAIS: Une autre partie du script contenait Remove-ADGroup (ligne cachée) 5. Résultat: Suppression accidentelle du groupe existant + données

Ce Que -WhatIf Aurait Révélé

New-ADGroup -Name "GG-EU-Clients-Japon" -WhatIf
# WhatIf: Le groupe 'GG-EU-Clients-Japon' existe déjà et sera IGNORÉ

Get-ADUser -Filter {Department -eq "Ventes"} | ForEach-Object {
    Add-ADGroupMember -Identity "GG-EU-Clients-Japon" -Members $_.SamAccountName -WhatIf
}
# WhatIf: Ajout de 'Victor' au groupe 'GG-EU-Clients-Japon'
# WhatIf: Ajout de 'Vanessa' au groupe 'GG-EU-Clients-Japon'
# WhatIf: ERREUR - Groupe 'GG-EU-Clients-Japon' non trouvé

💡 Révélation: -WhatIf aurait immédiatement montré que le groupe n'existait plus !


🧪 Lab Pratique: Apprivoiser -WhatIf

Exercice 5.1: Maîtriser les Nuances de -WhatIf

Commandes qui Supportent -WhatIf

# Test sur maxtec.be - TOUS avec -WhatIf
Set-ADUser -Identity Richard -Title "Chef RH" -WhatIf
Add-ADGroupMember -Identity "GG-EU-RH-Users" -Members Ines -WhatIf
Remove-ADUser -Identity TestUser -WhatIf
Move-ADObject -Identity "CN=Charles,OU=Users,OU=Compta,OU=EU,DC=maxtec,DC=be" -TargetPath "OU=Users,OU=IT,OU=EU,DC=maxtec,DC=be" -WhatIf

Commandes qui ne Supportent PAS -WhatIf

# Ces commandes sont "read-only" par nature
Get-ADUser -Identity Richard  # Pas de -WhatIf possible
Get-ADGroup -Filter {Name -like "GG-*"}  # Lecture seule

Le Piège des Commandes Hybrides

# ⚠️ ATTENTION: Get avec actions cachées
Get-ADUser -Filter * | Set-ADUser -Department "Test" -WhatIf
#     ↑                    ↑
#   Pas de -WhatIf        Avec -WhatIf

# ☠️ DANGER: Si on oublie -WhatIf sur Set-ADUser
Get-ADUser -Filter * | Set-ADUser -Department "Test"
# Tous les utilisateurs changent de département !

Exercice 5.2: Interpréter les Outputs -WhatIf

Output Normal vs WhatIf

# Sans -WhatIf (DANGEREUX - ne pas exécuter)
Remove-ADUser -Identity "CN=TestUser,OU=Users,OU=IT,OU=EU,DC=maxtec,DC=be"
# Output: (rien, utilisateur supprimé silencieusement)

# Avec -WhatIf (SÉCURISÉ)
Remove-ADUser -Identity "CN=TestUser,OU=Users,OU=IT,OU=EU,DC=maxtec,DC=be" -WhatIf
# Output: "What if: Performing the operation "Remove" on target "CN=TestUser,OU=Users,OU=IT,OU=EU,DC=maxtec,DC=be""

Décryptage des Messages WhatIf

# Message type 1: Action simple
Set-ADUser -Identity Richard -Title "Manager" -WhatIf
# "What if: Performing operation "Set" on target "CN=Richard,OU=Users,OU=RH,OU=EU,DC=maxtec,DC=be""

# Message type 2: Action avec détails
Add-ADGroupMember -Identity "GG-EU-IT-Users" -Members @("Ivan", "Ines") -WhatIf
# "What if: Performing operation "Add" on target "CN=GG-EU-IT-Users,OU=Groups,OU=IT,OU=EU,DC=maxtec,DC=be" to add member "CN=Ivan,OU=Users,OU=IT,OU=EU,DC=maxtec,DC=be""

🔥 Situations d'Urgence: Quand la Pression Monte

Scenario 1: Le Boss Impatient

👔 Boss: "C'est urgent ! Pas le temps pour tes vérifications !"
🧑‍💻 Vous: "Monsieur, -WhatIf prend 3 secondes et peut sauver 3 jours de récupération"
👔 Boss: "Bon... mais vite !"

🎯 Technique de Survie: Exécuter -WhatIf pendant que vous expliquez

# Pendant que vous parlez: "Je vais juste vérifier que..."
Get-ADUser -Filter {Department -eq "Stagiaires"} | Remove-ADUser -WhatIf

# Résultat immédiat visible:
# "What if: Remove CN=Alexandre.Martin,OU=Users,OU=Direction..." ← ☠️ STOP !

Scenario 2: L'Équipe qui Attend

💬 Équipe: "On attend tous pour partir, dépêche-toi !"
🎯 Pression: Maximum
⚡ Tentation: Skip -WhatIf "juste cette fois"

🛡️ Mantra de Survie: "Un -WhatIf de 5 secondes > Un weekend de 48h à récupérer"

Scenario 3: Le Script "Testé Mille Fois"

🧑‍💻 Vous: "J'ai exécuté ce script 100 fois en dev"
🧠 Cerveau: "Pas besoin de -WhatIf"
🚨 Réalité: Environnement prod ≠ dev

⚖️ Règle Absolue: Peu importe combien de fois testé, -WhatIf obligatoire en prod


🎮 Jeu Sérieux: "WhatIf ou Catastrophe"

Règles du Jeu

L'instructeur présente des scenarios. Classe vote: -WhatIf nécessaire ou pas ?

Scenario A

Get-ADUser -Identity Richard -Properties Department
Vote: -WhatIf nécessaire ? OUI / NON Réponse: NON (lecture seule)

Scenario B

Set-ADUser -Identity Richard -Department "Direction"
Vote: -WhatIf nécessaire ? OUI / NON Réponse: OUI (modification)

Scenario C ⚡

Get-ADUser -Filter {Name -like "Test*"} | Remove-ADUser
Vote: -WhatIf nécessaire ? OUI / NON Réponse: OUI CRITIQUE ! (suppression avec filtre = danger maximum)

Scenario D 🎭

# Script "sûr" du collègue de confiance
.\clean-old-accounts.ps1
Vote: -WhatIf nécessaire ? OUI / NON Réponse: OUI ! (Jamais faire confiance aveuglément, même aux collègues)


🏆 Certification -WhatIf: Test Final

Test de Réflexes (30 secondes par question)

Question 1

Vous devez désactiver le compte de Marie qui part demain. Première action ? - A) Set-ADUser -Identity Marie -Enabled $false - B) Set-ADUser -Identity Marie -Enabled $false -WhatIf - C) Demander confirmation au manager d'abord

Réponse: B (vérifier d'abord, confirmer ensuite)

Question 2

Script trouvé sur Stack Overflow avec 200 upvotes. Première exécution ? - A) Exécuter directement (200 upvotes = fiable) - B) Modifier pour votre environnement puis exécuter - C) Ajouter -WhatIf partout et analyser output

Réponse: C (popularité ≠ sécurité pour votre environnement)

Question 3

Vendredi 17h45, script "urgent" du DG. Que faites-vous ? - A) Exécuter rapidement avant de partir - B) -WhatIf d'abord, même sous pression - C) Remettre à lundi pour être sûr

Réponse: B (pression ≠ excuse pour ignorer sécurité)


🛠️ Votre Nouveau Workflow -WhatIf

Étapes Obligatoires (à Mémoriser)

1. 🤔 Lire et comprendre commande
2. 🔍 Identifier impact potentiel
3. ⚡ Ajouter -WhatIf à TOUTE commande destructive
4. 👁️ Analyser output -WhatIf ligne par ligne
5. 🎯 Vérifier que scope correspond à intention
6. ✅ Si OK, relancer sans -WhatIf
7. 📋 Documenter ce qui a été fait

Exceptions à la Règle -WhatIf

⚠️  AUCUNE EXCEPTION
⚠️  "Testé en dev" ≠ exception
⚠️  "Script simple" ≠ exception
⚠️  "Urgence" ≠ exception
⚠️  "Confiance collègue" ≠ exception
⚠️  "Pression hiérarchique" ≠ exception

🎯 Récapitulatif: Votre Nouvelle Religion

🛐 Les Articles de Foi -WhatIf

  1. Je crois que -WhatIf sauve des carrières
  2. Je jure de ne jamais skip -WhatIf sous pression
  3. Je promets d'évangéliser -WhatIf à mes collègues
  4. Je m'engage à préférer 5 secondes de -WhatIf à 5 jours de récupération
  5. Je reconnaîs que même mes propres scripts nécessitent -WhatIf

🎖️ Votre Badge d'Honneur

À partir d'aujourd'hui, vous êtes un "WhatIf Warrior" certifié

Motto: "Mieux vaut un -WhatIf de trop qu'un désastre de trop peu"


PAUSE OBLIGATOIRE 10 minutes - Intégrer la religion -WhatIf


🎯 Prochaine étape: Module 6 - Kit d'Urgence (Procédures de Panique "Break Glass")