Module 3 â L'IA comme copilote : prompts efficaces et validation critique
Durée: 1h30 | Prérequis: Modules 1-2 complétés
Objectif
Ă la fin de ce module, vous saurez utiliser une IA (ChatGPT, Copilot, ClaudeâŠ) comme un copilote fiable pour PowerShell AD â pas comme un pilote automatique aveugle.
Le principe : copilote, pas pilote
L'approche à éviter :
"ChatGPT, écris-moi un script pour nettoyer AD"
â Copier-coller direct
â ExĂ©cution sans relecture
â DĂ©sastre presque garanti
L'approche professionnelle :
"Aide-moi Ă comprendre et valider ce script AD"
â Analyse ligne par ligne
â Adaptation Ă l'environnement maxtec.be
â Test avec -WhatIf
â ExĂ©cution maĂźtrisĂ©e
Quatre usages typiques
Usage 1 â GĂ©nĂ©rer une base de script
Bon pour : structure générale, syntaxe de base, point de départ. Risque : moyen. Validation obligatoire.
Usage 2 â Comprendre du code existant
Bon pour : expliquer un script complexe, identifier les risques. Risque : faible. Validation recommandée.
Usage 3 â Code review
Bon pour : repérer les erreurs, suggérer des améliorations sécurité. Risque : trÚs faible. Validation optionnelle.
Usage 4 â ExĂ©cution directe sans relecture
Ă ne jamais faire. Risque maximal.
DĂ©mo en direct â session ChatGPT
L'instructeur ouvre ChatGPT devant la classe.
Ticket : trouver tous les utilisateurs RH dont le mot de passe n'a pas changé depuis 6 mois.
Prompt naĂŻf â Ă Ă©viter
écris un script powershell pour trouver les utilisateurs RH avec vieux mots de passe
Trop vague, aucun contexte de sécurité. La réponse sera générique et probablement inutilisable telle quelle.
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 le scope avec SearchBase
- Affichage clair des résultats
- Lecture seule, aucune modification
- Commentaires explicatifs
STRUCTURE OU: OU=RH,OU=EU,DC=maxtec,DC=be
Réponse IA type
# Script de recherche utilisateurs RH â Mots de passe anciens
# GĂ©nĂ©rĂ© avec assistance IA â Ă valider avant usage
# Domaine: maxtec.be
Import-Module ActiveDirectory
$dateLimit = (Get-Date).AddDays(-180)
$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 {
if (-not (Get-Module ActiveDirectory)) {
throw "Module ActiveDirectory non disponible"
}
try {
Get-ADOrganizationalUnit -Identity $searchBase -ErrorAction Stop
Write-Host "OU RH trouvée" -ForegroundColor Green
} catch {
throw "OU non trouvée: $searchBase"
}
$utilisateursRH = Get-ADUser -Filter * -SearchBase $searchBase `
-Properties PasswordLastSet, Department, LastLogonDate, Enabled `
-ErrorAction Stop
Write-Host "Utilisateurs RH trouvés: $($utilisateursRH.Count)" -ForegroundColor Cyan
$utilisateursMotDePasseAncien = $utilisateursRH | Where-Object {
$_.PasswordLastSet -lt $dateLimit -and
$_.Enabled -eq $true -and
$_.PasswordLastSet -ne $null
}
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
$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
}
Validation critique du script généré
Ce qui est bien
- Gestion d'erreurs avec
try/catch. - Vérifications préalables (module, OU).
- SearchBase spécifique à maxtec.be.
- Affichage formaté.
- Lecture seule.
Ce qui mérite attention
- SearchBase codĂ©e en dur â et si la structure change ?
- Filtre Department non utilisĂ© â redondance avec SearchBase.
- Null check â
PasswordLastSetpeut ĂȘtre$nullpour certains comptes.
Améliorations possibles
# 1. ParamĂštres flexibles
param(
[string]$SearchBase = "OU=RH,OU=EU,DC=maxtec,DC=be",
[int]$JoursLimite = 180
)
# 2. Filtre plus robuste
$utilisateursMotDePasseAncien = $utilisateursRH | Where-Object {
$_.PasswordLastSet -ne $null -and
$_.PasswordLastSet -lt $dateLimit -and
$_.Enabled -eq $true
}
# 3. Exclusion des comptes de 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 3.1 â votre premier prompt structurĂ©
Mission : créer 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]
STRUCTURE OU: [Ă COMPLĂTER]
Solution
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Ă:
- Gestion d'erreurs et validation
- Limiter le scope avec SearchBase
- Affichage des détails de verrouillage
- Option -WhatIf pour le déverrouillage
- Commentaires explicatifs
STRUCTURE OU: OU=IT,OU=EU,DC=maxtec,DC=be
Cinq rĂšgles pour utiliser une IA avec PowerShell AD
1. Contexte précis = réponse précise
à éviter : "script powershell utilisateurs"
à préférer: "script PowerShell AD pour maxtec.be, utilisateurs département Ventes,
recherche comptes expirés, production, avec -WhatIf"
2. Toujours demander les sécurités
Phrases utiles Ă inclure dans le prompt :
- "Inclus
-WhatIfet validation d'erreurs" - "Environnement production, sécurité critique"
- "Avec commentaires explicatifs"
- "Gestion d'erreurs robuste"
3. Valider ligne par ligne
# Bon : on comprend chaque ligne
Get-ADUser -Filter {Department -eq "IT"} -Properties LockedOut
# Mauvais : on l'exécute parce que "ça marche"
Get-ADUser -Filter * | ?{$_.LockedOut} | %{Unlock-ADAccount $_}
4. Adapter Ă l'environnement
# Script générique
-SearchBase "OU=Users,DC=contoso,DC=com"
# Adapté à maxtec.be
-SearchBase "OU=IT,OU=EU,DC=maxtec,DC=be"
5. Tester d'abord
# Toujours commencer par observer
Get-ADUser -Filter {Department -eq "IT"} | Select-Object Name
# Puis exécuter la vraie commande
L'IA comme outil de code review
Prompt d'analyse de script
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 destructives 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 type :
Note sécurité: 3/10
Risques identifiés:
1. Critique â Get-ADUser -Filter * charge tous les utilisateurs du domaine
2. Critique â Set-ADUser sans -WhatIf, modification directe
3. Moyen â Pas de gestion d'erreurs
4. Moyen â Pas de vĂ©rification prĂ©alable
Corrections nécessaires:
1. Utiliser SearchBase pour limiter le scope
2. Ajouter -WhatIf
3. Vérifier le département avant modification
4. Ajouter try/catch
Exercice 3.2 â dĂ©tecter les problĂšmes
Utilisez une IA pour analyser ce script et identifier les problĂšmes :
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 Ă poser Ă l'IA
- Que fait exactement ce script ?
- Quels sont les risques si je l'exécute sur maxtec.be ?
- Comment le rendre sécurisé ?
Risques attendus
- Suppression de groupes sans
-WhatIf. - Aucune vérification si certains groupes sont critiques.
- Erreur de logique : groupe vide â groupe inutile.
- Aucune sauvegarde avant suppression.
Templates de prompts prĂȘts Ă utiliser
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
- Lecture seule
- 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
SĂCURITĂS:
- -WhatIf par défaut
- Validation avant exécution
- Gestion d'erreurs
- Logging des actions
- Annulation possible
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 destructives
- Améliorations nécessaires
- Note sécurité /10
- Version corrigée
ENVIRONNEMENT: maxtec.be, domaine production
Récapitulatif
Ce que vous savez faire maintenant
- Ăcrire des prompts prĂ©cis qui produisent du code utilisable.
- Valider de maniÚre critique chaque script généré.
- Adapter systématiquement à l'environnement cible.
- Utiliser l'IA pour détecter les problÚmes d'un script.
- Garder
-WhatIfcomme rĂ©flexe, mĂȘme avec l'IA.
Points Ă retenir
- L'IA propose, vous décidez.
- Pas de copier-coller sans relecture.
- Toujours tester avant production.
- L'IA n'a pas votre contexte â elle se trompe sur les dĂ©tails spĂ©cifiques.
Workflow
- Définir le problÚme.
- Prompt précis avec contexte sécurité.
- Valider ligne par ligne.
- Adapter Ă maxtec.be.
- Tester avec
-WhatIf. - Documenter.
Suite : Module 4 â DĂ©tecter les scripts dangereux (erreurs cachĂ©es et piĂšges classiques).