Module 3: L'IA comme Copilote - Prompts Sécurisés et Validation Critique
Durée: 1h30 | Prérequis: Modules 1-2 complétés
🎯 Objectif de ce Module
À la fin: Vous saurez utiliser l'IA (ChatGPT, Copilot, etc.) comme un copilote fiable pour PowerShell AD, pas comme un pilote automatique dangereux.
🤝 Nouvelle Philosophie: IA = Copilote, PAS Pilote
❌ APPROCHE DANGEREUSE
"ChatGPT, écris-moi un script pour nettoyer AD"
→ Copier-coller direct
→ Exécution aveugle
→ 🔥 DÉSASTRE GARANTI
✅ APPROCHE PROFESSIONNELLE 2025
"IA, aide-moi à comprendre et valider ce script AD"
→ Analysis critique ligne par ligne
→ Adaptation environnement maxtec.be
→ Tests avec -WhatIf
→ ✅ Sécurité garantie
🧠 Les 4 Types d'Utilisation IA pour PowerShell AD
Type 1: 🔍 Générer des Idées de Base
Bon pour: Structure générale, syntaxe de base, concepts Risque: Moyen Validation: Obligatoire
Type 2: 🔧 Comprendre du Code Existant
Bon pour: Expliquer scripts complexes, identifier risques Risque: Faible Validation: Recommandée
Type 3: 🚨 Détecter les Problèmes
Bon pour: Code review, identifier erreurs, suggestions sécurité Risque: Très faible Validation: Optionnelle
Type 4: ⚡ Exécution Directe
Bon pour: JAMAIS Risque: EXTRÊME Validation: IMPOSSIBLE
🎯 Démonstration Live: Session ChatGPT Sécurisée
Scénario Réel
L'instructeur ouvre ChatGPT devant la classe
Ticket: "Trouver tous les utilisateurs du département RH qui n'ont pas changé leur mot de passe depuis 6 mois"
🔥 PROMPT NAÏF (NE PAS FAIRE)
"écris un script powershell pour trouver les utilisateurs RH avec vieux mots de passe"
Problème: Trop vague, pas de contexte sécurité
✅ PROMPT PROFESSIONNEL
"Aide-moi à créer un script PowerShell pour Active Directory avec ces exigences:
CONTEXTE:
- Domaine: maxtec.be
- Recherche: utilisateurs département RH
- Critère: mot de passe non changé depuis 6 mois
- Environnement: Production (sécurité critique)
EXIGENCES SÉCURITÉ:
- INCLUS -WhatIf et validation d'erreurs
- Limiter scope avec SearchBase
- Affichage clair des résultats
- Pas de modifications, seulement lecture
- Commentaires explicatifs
EXEMPLE STRUCTURE OU: OU=RH,OU=EU,DC=maxtec,DC=be
Génère le script avec toutes les sécurités."
🤖 Réponse IA (Exemple)
# Script de recherche utilisateurs RH - Mots de passe anciens
# Généré avec assistance IA - À VALIDER AVANT USAGE
# Domaine: maxtec.be
Import-Module ActiveDirectory
# Configuration
$dateLimit = (Get-Date).AddDays(-180) # 6 mois
$searchBase = "OU=RH,OU=EU,DC=maxtec,DC=be"
Write-Host "=== RECHERCHE UTILISATEURS RH - MOTS DE PASSE ANCIENS ===" -ForegroundColor Cyan
Write-Host "Date limite: $dateLimit" -ForegroundColor Yellow
Write-Host "Search Base: $searchBase" -ForegroundColor Yellow
try {
# Vérifier que le module AD est disponible
if (-not (Get-Module ActiveDirectory)) {
throw "Module ActiveDirectory non disponible"
}
# Vérifier que l'OU existe
try {
Get-ADOrganizationalUnit -Identity $searchBase -ErrorAction Stop
Write-Host "✅ OU RH trouvée" -ForegroundColor Green
} catch {
throw "OU non trouvée: $searchBase"
}
# Rechercher utilisateurs RH avec propriétés nécessaires
$utilisateursRH = Get-ADUser -Filter * -SearchBase $searchBase `
-Properties PasswordLastSet, Department, LastLogonDate, Enabled `
-ErrorAction Stop
Write-Host "Utilisateurs RH trouvés: $($utilisateursRH.Count)" -ForegroundColor Cyan
# Filtrer ceux avec mot de passe ancien
$utilisateursMotDePasseAncien = $utilisateursRH | Where-Object {
$_.PasswordLastSet -lt $dateLimit -and
$_.Enabled -eq $true -and
$_.PasswordLastSet -ne $null
}
# Afficher résultats
if ($utilisateursMotDePasseAncien.Count -eq 0) {
Write-Host "✅ Aucun utilisateur RH avec mot de passe > 6 mois" -ForegroundColor Green
} else {
Write-Host "⚠️ Utilisateurs RH avec mot de passe > 6 mois:" -ForegroundColor Yellow
Write-Host "================================================" -ForegroundColor Yellow
$utilisateursMotDePasseAncien | Select-Object `
@{Name="Nom"; Expression={$_.Name}},
@{Name="Login"; Expression={$_.SamAccountName}},
@{Name="Dernier changement MDP"; Expression={$_.PasswordLastSet}},
@{Name="Jours depuis changement"; Expression={((Get-Date) - $_.PasswordLastSet).Days}} |
Format-Table -AutoSize
Write-Host "Total concernés: $($utilisateursMotDePasseAncien.Count)" -ForegroundColor Red
}
} catch {
Write-Error "Erreur lors de l'exécution: $($_.Exception.Message)"
Write-Host "Vérifiez les permissions et la connectivité AD" -ForegroundColor Yellow
}
Write-Host "=== RECHERCHE TERMINÉE ===" -ForegroundColor Cyan
🔍 Validation Critique du Script IA
✅ Points Forts Identifiés
- Gestion d'erreurs avec try-catch
- Vérifications préalables (module, OU)
- SearchBase spécifique à maxtec.be
- Affichage formaté des résultats
- Pas de modifications (read-only)
⚠️ Points à Améliorer
- Hardcodé: SearchBase fixe (et si structure différente ?)
- Filtre Department: Pas utilisé (redondance avec SearchBase)
- Null check: PasswordLastSet peut être null pour certains comptes
🔧 Améliorations Suggérées
# Amélioration 1: Paramètres flexibles
param(
[string]$SearchBase = "OU=RH,OU=EU,DC=maxtec,DC=be",
[int]$JoursLimite = 180
)
# Amélioration 2: Meilleur filtre
$utilisateursMotDePasseAncien = $utilisateursRH | Where-Object {
$_.PasswordLastSet -ne $null -and
$_.PasswordLastSet -lt $dateLimit -and
$_.Enabled -eq $true
}
# Amélioration 3: Exclusions comptes service
$utilisateursMotDePasseAncien = $utilisateursRH | Where-Object {
$_.PasswordLastSet -ne $null -and
$_.PasswordLastSet -lt $dateLimit -and
$_.Enabled -eq $true -and
$_.SamAccountName -notlike "*svc*" -and
$_.SamAccountName -notlike "*service*"
}
🎯 Exercice Pratique 3.1: Votre Premier Prompt Professionnel
Mission
Créez un prompt pour générer un script qui trouve tous les utilisateurs IT de maxtec.be verrouillés.
Template à Compléter
"Aide-moi à créer un script PowerShell pour Active Directory avec ces exigences:
CONTEXTE:
- Domaine: [À COMPLÉTER]
- Recherche: [À COMPLÉTER]
- Critère: [À COMPLÉTER]
- Environnement: [À COMPLÉTER]
EXIGENCES SÉCURITÉ:
- [À COMPLÉTER]
- [À COMPLÉTER]
- [À COMPLÉTER]
EXEMPLE STRUCTURE OU: [À COMPLÉTER]
Génère le script avec toutes les sécurités."
Solution Suggérée
"Aide-moi à créer un script PowerShell pour Active Directory avec ces exigences:
CONTEXTE:
- Domaine: maxtec.be
- Recherche: utilisateurs département IT
- Critère: comptes verrouillés (LockedOut = True)
- Environnement: Production (sécurité critique)
EXIGENCES SÉCURITÉ:
- INCLUS gestion d'erreurs et validation
- Limiter scope avec SearchBase
- Affichage des détails de verrouillage
- Option -WhatIf pour déverrouillage
- Commentaires explicatifs
EXEMPLE STRUCTURE OU: OU=IT,OU=EU,DC=maxtec,DC=be
Génère le script avec toutes les sécurités et option de déverrouillage."
🛡️ Les 5 Règles d'Or pour Utiliser l'IA Sécurisée
Règle #1: Contexte Précis = Réponse Précise
❌ "script powershell utilisateurs"
✅ "script PowerShell AD pour maxtec.be, utilisateurs département Ventes,
recherche comptes expirés, production, avec -WhatIf"
Règle #2: Toujours Demander les Sécurités
Phrases magiques à inclure: - "INCLUS -WhatIf et validation d'erreurs" - "environnement production, sécurité critique" - "avec commentaires explicatifs" - "gestion d'erreurs robuste"
Règle #3: Valider Ligne par Ligne
# ✅ BON: Comprendre chaque ligne
Get-ADUser -Filter {Department -eq "IT"} -Properties LockedOut
# ❌ MAUVAIS: Je ne comprends pas mais ça marche
Get-ADUser -Filter * | ?{$_.LockedOut} | %{Unlock-ADAccount $_}
Règle #4: Adapter à Votre Environnement
# ❌ Script générique de l'IA
-SearchBase "OU=Users,DC=contoso,DC=com"
# ✅ Adapté à maxtec.be
-SearchBase "OU=IT,OU=EU,DC=maxtec,DC=be"
Règle #5: Tester d'Abord, Exécuter Ensuite
# TOUJOURS commencer par:
Get-ADUser -Filter {Department -eq "IT"} -WhatIf # Même si pas nécessaire
Get-ADUser -Filter {Department -eq "IT"} | Select-Object Name # Voir le résultat
# PUIS exécuter la vraie commande
🎭 Cas d'Usage Avancés: L'IA comme Détecteur de Problèmes
Scénario: Analyser un Script Suspect
Prompt de Sécurité:
"Analyse ce script PowerShell AD ligne par ligne et identifie tous les risques de sécurité, erreurs potentielles, et améliorations nécessaires:
[COLLER LE SCRIPT ICI]
Focus sur:
- Commandes dangereuses sans -WhatIf
- Filtres trop larges
- Gestion d'erreurs manquante
- Hardcoding problématique
- Risques pour environnement production
Donne une note de sécurité /10 et explique comment corriger."
Exemple d'Analyse
Script à analyser:
Get-ADUser -Filter * | Where-Object {$_.Department -eq "IT"} | Set-ADUser -Title "Informaticien"
Réponse IA attendue:
ANALYSE SÉCURITÉ: 3/10 ⚠️
RISQUES IDENTIFIÉS:
1. 🚨 CRITIQUE: Get-ADUser -Filter * charge TOUS les utilisateurs du domaine
2. 🚨 CRITIQUE: Set-ADUser sans -WhatIf = modifications directes
3. ⚠️ MOYEN: Pas de gestion d'erreurs
4. ⚠️ MOYEN: Pas de vérification préalable
CORRECTIONS NÉCESSAIRES:
1. Utiliser SearchBase pour limiter scope
2. Ajouter -WhatIf obligatoire
3. Vérifier département avant modification
4. Ajouter try-catch
SCRIPT CORRIGÉ:
[Script amélioré avec sécurités]
🎯 Exercice Pratique 3.2: IA Detective
Mission
Utilisez l'IA pour analyser ce script "bomba" et identifier tous les problèmes:
# Script trouvé sur un forum
Get-ADGroup -Filter {Name -like "GG-*"} | ForEach-Object {
$membres = Get-ADGroupMember -Identity $_.Name
if ($membres.Count -eq 0) {
Remove-ADGroup -Identity $_.Name -Confirm:$false
}
}
Questions pour l'IA
- "Que fait exactement ce script ?"
- "Quels sont les risques si je l'exécute sur maxtec.be ?"
- "Comment le rendre sécurisé ?"
Réponse Attendue
Risques majeurs:
- Suppression de groupes sans -WhatIf
- Pas de vérification si groupes critiques
- Logic flaw: groupes vides ≠ groupes inutiles
- Aucune sauvegarde avant suppression
💡 Prompts Prêts à Utiliser (Templates)
🔍 Template Diagnostic
"Aide-moi à diagnostiquer un problème Active Directory:
SITUATION: [Décrire le problème]
DOMAINE: maxtec.be
UTILISATEUR/GROUPE CONCERNÉ: [Nom]
SYMPTÔMES: [Ce qui ne marche pas]
Génère un script de diagnostic PowerShell avec:
- Commandes pour identifier la cause
- Vérifications étape par étape
- Affichage clair des résultats
- Pas de modifications, seulement lecture
- Commentaires explicatifs"
🔧 Template Action Sécurisée
"Crée un script PowerShell AD pour cette action:
ACTION: [Ce que je veux faire]
CIBLE: [Utilisateurs/Groupes concernés]
ENVIRONNEMENT: maxtec.be, production critique
SÉCURITÉS OBLIGATOIRES:
- -WhatIf par défaut
- Validation avant exécution
- Gestion d'erreurs robuste
- Logging des actions
- Possibilité d'annulation
Structure OU: OU=[dept],OU=EU,DC=maxtec,DC=be"
🔍 Template Code Review
"Analyse ce script PowerShell AD et donne un audit complet:
[COLLER SCRIPT]
FOCUS SÉCURITÉ:
- Risques pour production
- Commandes dangereuses
- Améliorations nécessaires
- Note sécurité /10
- Version corrigée
ENVIRONNEMENT: maxtec.be, domaine production"
🎓 Récapitulatif: Maîtriser l'IA comme Copilote
✅ Ce Que Vous Savez Maintenant
- Prompts précis = réponses utilisables
- Validation critique de chaque script généré
- Adaptation environnement obligatoire
- L'IA détecte les problèmes mieux que nous
- -WhatIf reste roi même avec l'IA
🚨 Ce Qu'Il Faut Retenir
- L'IA = suggestions, vous = décision finale
- Jamais de copier-coller aveugle
- Toujours tester avant production
- L'IA peut se tromper sur votre contexte spécifique
🎯 Votre Nouvelle Workflow
- Réfléchir au problème
- Prompts précis avec contexte sécurité
- Valider ligne par ligne
- Adapter à maxtec.be
- Tester avec -WhatIf
- Documenter ce qui fonctionne
☕ PAUSE OBLIGATOIRE 10 minutes - Essayez vos propres prompts
🎯 Prochaine étape: Module 4 - Scripts Bombes Lab (Détecter Erreurs Mortelles Cachées)