Exercice 8 : Troubleshooting - "La GPO Ne S'Applique Pas !"
Niveau de Difficulté
🔴 Avancé - Diagnostic et résolution de problèmes
Objectifs Pédagogiques
- Diagnostiquer méthodiquement les problèmes d'application de GPO
- Utiliser les outils de diagnostic Windows (gpupdate, gpresult, Event Viewer)
- Comprendre l'ordre de priorité et l'héritage des GPO
- Résoudre des conflits de stratégies de groupe
Durée Estimée
30-40 minutes
Prérequis
- Connaissance approfondie des GPO
- Capacité à utiliser PowerShell pour le diagnostic
- Compréhension de l'héritage AD
- Compétences en résolution de problèmes
Contexte / Scénario
Date: Mercredi matin, 10h15
Vous recevez plusieurs tickets urgents du support utilisateur :
Ticket #1 - Hugo Laurent (Motion Designer - Creative)
"Bonjour IT,
Je n'arrive plus à accéder au Panneau de configuration sur mon poste. Il y a deux jours, ça fonctionnait encore. Maintenant, quand je clique dessus, rien ne se passe.
J'ai besoin d'accéder aux paramètres de mon écran pour calibrer mes couleurs pour un projet client urgent. Pouvez-vous débloquer ça rapidement ?
Hugo"
Ticket #2 - Amélie Dubois (Community Manager - Marketing)
"Bonjour,
Mon collègue Damien et moi travaillons dans le même département Marketing, mais lui ne peut pas utiliser l'invite de commandes alors que moi je peux. C'est bizarre, on devrait avoir les mêmes permissions, non ?
Il a besoin du CMD pour lancer un script d'export de données analytics.
Amélie"
Email de Rachid Dupont (Responsable IT)
"J'ai vu les tickets. Voici le contexte :
Lundi dernier, j'ai créé une nouvelle GPO "CreativeHub - Restrictions Utilisateurs Juniors" pour bloquer l'accès au Panneau de configuration et au CMD pour les juniors du département Marketing et Creative. Je l'ai liée aux OUs correspondantes.
Le problème : Cette GPO ne devrait s'appliquer QU'AUX UTILISATEURS JUNIORS (nouveaux employés avec moins d'un an d'expérience), mais elle semble s'appliquer à tout le monde dans Creative, et pas du tout dans Marketing.
J'ai vérifié : - La GPO existe bien - Elle est liée aux bonnes OUs - Les paramètres de registre sont corrects
Mais quelque chose ne fonctionne pas. Je dois gérer une autre urgence. Peux-tu diagnostiquer et corriger le problème ?
NOTE : Les juniors sont identifiés dans AD par leur appartenance au groupe "GG-CreativeHub-Juniors" (que j'ai créé).
Rachid"
Situation Initiale (Problèmes Simulés)
Problème 1 : GPO appliquée à tout le département Creative
La GPO "CreativeHub - Restrictions Utilisateurs Juniors" s'applique à TOUS les utilisateurs de Creative (OU=Users,OU=Creative), alors qu'elle devrait s'appliquer uniquement aux membres du groupe "GG-CreativeHub-Juniors".
Utilisateurs affectés : - Hugo (Senior, ne devrait PAS avoir de restrictions) - Fabien (Senior, ne devrait PAS avoir de restrictions) - Julien (Junior, DEVRAIT avoir des restrictions) ← Ce serait le seul concerné
Problème 2 : GPO non appliquée dans Marketing
La GPO est liée à l'OU Marketing, mais le lien est désactivé par erreur.
Utilisateurs affectés : - Damien devrait avoir des restrictions (il est junior) mais ne les a pas
Problème 3 : Conflit d'héritage
Une GPO plus ancienne au niveau de l'OU CreativeHub (racine) bloque l'héritage pour certaines sous-OUs.
Tâche à Réaliser
Mission Principale
Diagnostiquer pourquoi la GPO ne s'applique pas correctement et corriger les problèmes pour que :
- Seuls les utilisateurs juniors aient les restrictions (Panneau de config et CMD désactivés)
- Les restrictions s'appliquent dans tous les départements (Creative ET Marketing)
- Les utilisateurs seniors (Hugo, Fabien, Camille, etc.) ne soient pas affectés
Étapes de Diagnostic Recommandées
1. Comprendre la Configuration Actuelle
Questions à investiguer : - Quelles GPOs existent actuellement ? - Où sont-elles liées ? - Quels sont leurs paramètres ? - Y a-t-il des problèmes d'héritage ?
Commandes utiles :
# Lister toutes les GPO
Get-GPO -All | Select-Object DisplayName, GpoStatus, CreationTime
# Voir les GPOs liées à une OU
Get-GPInheritance -Target "OU=Users,OU=Creative,OU=CreativeHub,DC=maxtec,DC=be"
# Voir les détails d'une GPO
Get-GPOReport -Name "CreativeHub - Restrictions Utilisateurs Juniors" -ReportType Html -Path "C:\Temp\GPO_Report.html"
2. Identifier les Groupes
Questions : - Le groupe "GG-CreativeHub-Juniors" existe-t-il ? - Qui en est membre ? - Est-il utilisé pour le filtrage de sécurité de la GPO ?
Commandes utiles :
# Vérifier si le groupe existe
Get-ADGroup -Filter {Name -like "*Junior*"}
# Voir les membres
Get-ADGroupMember -Identity "GG-CreativeHub-Juniors"
3. Vérifier le Filtrage de Sécurité (Security Filtering)
Le problème probable : La GPO n'utilise pas le filtrage de sécurité pour cibler uniquement le groupe Juniors.
Concepts clés : - Par défaut, une GPO s'applique à "Authenticated Users" (tous les utilisateurs authentifiés) - Le filtrage de sécurité permet de limiter l'application à des groupes spécifiques - Le groupe doit avoir les permissions "Lecture" ET "Appliquer la stratégie de groupe"
Comment corriger :
1. Ouvrir gpmc.msc
2. Sélectionner la GPO
3. Onglet "Étendue" (Scope)
4. Section "Filtrage de sécurité" :
- Retirer "Authenticated Users"
- Ajouter "GG-CreativeHub-Juniors"
4. Vérifier les Liens GPO
Questions : - Les liens sont-ils activés ? - Y a-t-il des problèmes d'ordre de priorité ?
Commandes utiles :
# Voir les liens d'une GPO
$gpo = Get-GPO -Name "CreativeHub - Restrictions Utilisateurs Juniors"
Get-GPO -Guid $gpo.Id | Select-Object DisplayName, @{Name="Links";Expression={(Get-ADObject -Filter {gpLink -like "*$($_.Id)*"} -Properties gpLink).DistinguishedName}}
5. Tester l'Application
Commandes :
# Forcer la mise à jour des GPO
gpupdate /force
# Voir les GPO appliquées à un utilisateur spécifique
gpresult /r /scope:user /user:hugo
# Générer un rapport HTML détaillé
gpresult /h C:\Temp\gpresult_hugo.html /user:hugo
Votre Démarche
- Créer le groupe GG-CreativeHub-Juniors (s'il n'existe pas)
- Identifier les utilisateurs juniors et les ajouter au groupe
- Configurer le filtrage de sécurité de la GPO pour cibler uniquement ce groupe
- Vérifier et activer les liens GPO sur toutes les OUs concernées
- Tester que la GPO s'applique correctement aux juniors uniquement
- Documenter la solution
Utilisateurs Juniors Identifiés
Basé sur les profils de postes, voici les juniors (moins d'un an d'expérience) :
Marketing : - Élise Robert (Social Media Analyst) - Junior - Damien Petit (Content Strategist) - Junior
Creative : - Julien Roux (Designer UX/UI) - Junior
Client Services : - Manon Girard (Chef de Projet Junior) - DÉSACTIVÉE (ne pas inclure)
IT Support : - (Aucun junior identifié)
Pas d'Instructions Détaillées !
Cet exercice de troubleshooting nécessite que vous : - Analysiez la situation - Formuliez des hypothèses - Testez vos hypothèses - Trouviez et appliquez la solution - Validez que le problème est résolu
Utilisez votre esprit d'analyse et les outils de diagnostic Windows/PowerShell.
Vérification de la Réussite
Script de Vérification
.\verif_exercice_08.ps1
Critères de Réussite
- Le groupe "GG-CreativeHub-Juniors" existe
- Les utilisateurs juniors (Élise, Damien, Julien) sont membres du groupe
- La GPO utilise le filtrage de sécurité (groupe Juniors, pas "Authenticated Users")
- La GPO est liée ET activée sur les OUs Creative\Users et Marketing\Users
- Les utilisateurs seniors (Hugo, Fabien, Camille) NE sont PAS affectés par la GPO
- Les utilisateurs juniors ONT les restrictions (CMD et Panneau de config désactivés)
Test Manuel
Test 1 : Vérifier le filtrage :
$gpo = Get-GPO -Name "CreativeHub - Restrictions Utilisateurs Juniors"
Get-GPPermissions -Name $gpo.DisplayName -All | Where-Object {$_.Permission -eq "GpoApply"}
# Doit montrer "GG-CreativeHub-Juniors", PAS "Authenticated Users"
Test 2 : Simuler l'application pour Hugo (senior) :
# Hugo NE DOIT PAS recevoir la GPO
gpresult /r /scope:user /user:hugo
# La GPO "Restrictions Utilisateurs Juniors" NE DOIT PAS apparaître
Test 3 : Simuler l'application pour Julien (junior) :
# Julien DOIT recevoir la GPO
gpresult /r /scope:user /user:julien
# La GPO "Restrictions Utilisateurs Juniors" DOIT apparaître
Solution Complète (Pour Instructeur)
Script de Configuration et Correction
Import-Module ActiveDirectory
Import-Module GroupPolicy
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " TROUBLESHOOTING GPO - SOLUTION" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
$gpoName = "CreativeHub - Restrictions Utilisateurs Juniors"
$groupName = "GG-CreativeHub-Juniors"
$rootOU = "OU=CreativeHub,DC=maxtec,DC=be"
# ÉTAPE 1: Créer le groupe Juniors (si inexistant)
Write-Host "`n[1/5] Création/Vérification du groupe Juniors..." -ForegroundColor Yellow
try {
$group = Get-ADGroup -Identity $groupName -ErrorAction Stop
Write-Host " Le groupe $groupName existe déjà." -ForegroundColor Yellow
} catch {
# Créer une OU pour les groupes globaux si nécessaire
$groupsOU = "OU=Groupes_Projets,$rootOU"
try {
Get-ADOrganizationalUnit -Identity $groupsOU -ErrorAction Stop | Out-Null
} catch {
New-ADOrganizationalUnit -Name "Groupes_Projets" -Path $rootOU -ProtectedFromAccidentalDeletion $false
}
New-ADGroup -Name $groupName `
-GroupScope Global `
-GroupCategory Security `
-Path $groupsOU `
-Description "Employés juniors (moins d'un an d'ancienneté) - Restrictions de sécurité renforcées"
Write-Host " ✓ Groupe $groupName créé" -ForegroundColor Green
$group = Get-ADGroup -Identity $groupName
}
# ÉTAPE 2: Ajouter les utilisateurs juniors au groupe
Write-Host "`n[2/5] Ajout des utilisateurs juniors au groupe..." -ForegroundColor Yellow
$juniors = @("elise", "damien", "julien") # SAM Accounts des juniors
foreach ($junior in $juniors) {
try {
$user = Get-ADUser -Identity $junior -ErrorAction Stop
Add-ADGroupMember -Identity $groupName -Members $junior -ErrorAction Stop
Write-Host " ✓ $junior ajouté au groupe Juniors" -ForegroundColor Green
} catch {
if ($_.Exception.Message -like "*already a member*") {
Write-Host " $junior est déjà membre du groupe" -ForegroundColor Yellow
} elseif ($_.Exception.Message -like "*Cannot find*") {
Write-Host " ⚠ Utilisateur $junior introuvable" -ForegroundColor Yellow
} else {
Write-Host " ✗ ERREUR pour $junior : $($_.Exception.Message)" -ForegroundColor Red
}
}
}
# ÉTAPE 3: Vérifier/Créer la GPO
Write-Host "`n[3/5] Vérification de la GPO..." -ForegroundColor Yellow
try {
$gpo = Get-GPO -Name $gpoName -ErrorAction Stop
Write-Host " La GPO '$gpoName' existe." -ForegroundColor Yellow
} catch {
Write-Host " La GPO n'existe pas, création..." -ForegroundColor Yellow
# Créer la GPO
$gpo = New-GPO -Name $gpoName -Comment "Restrictions pour utilisateurs juniors uniquement"
# Configurer les restrictions
Set-GPRegistryValue -Name $gpoName `
-Key "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" `
-ValueName "NoControlPanel" -Type DWord -Value 1 | Out-Null
Set-GPRegistryValue -Name $gpoName `
-Key "HKCU\Software\Policies\Microsoft\Windows\System" `
-ValueName "DisableCMD" -Type DWord -Value 2 | Out-Null
Write-Host " ✓ GPO créée avec restrictions" -ForegroundColor Green
}
# ÉTAPE 4: Configurer le FILTRAGE DE SÉCURITÉ (Security Filtering)
Write-Host "`n[4/5] Configuration du filtrage de sécurité..." -ForegroundColor Yellow
# Retirer "Authenticated Users" (appliqué par défaut)
try {
$authUsers = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-11") # Authenticated Users SID
Set-GPPermissions -Name $gpoName -PermissionLevel None -TargetName "Authenticated Users" -TargetType Group -ErrorAction Stop
Write-Host " ✓ 'Authenticated Users' retiré du filtrage" -ForegroundColor Green
} catch {
if ($_.Exception.Message -like "*does not have*") {
Write-Host " 'Authenticated Users' n'était pas dans le filtrage" -ForegroundColor Yellow
} else {
Write-Host " ⚠ Erreur lors du retrait: $($_.Exception.Message)" -ForegroundColor Yellow
}
}
# Ajouter le groupe Juniors avec permission GpoApply
try {
Set-GPPermissions -Name $gpoName -PermissionLevel GpoApply -TargetName $groupName -TargetType Group -ErrorAction Stop
Write-Host " ✓ Groupe '$groupName' ajouté avec permission GpoApply" -ForegroundColor Green
} catch {
Write-Host " ⚠ Erreur lors de l'ajout: $($_.Exception.Message)" -ForegroundColor Yellow
}
# Le groupe doit aussi avoir la permission "Lecture" (Read)
try {
Set-GPPermissions -Name $gpoName -PermissionLevel GpoRead -TargetName $groupName -TargetType Group -ErrorAction Stop
Write-Host " ✓ Permission 'Lecture' accordée au groupe Juniors" -ForegroundColor Green
} catch {
Write-Host " La permission existe peut-être déjà" -ForegroundColor Yellow
}
# ÉTAPE 5: Lier la GPO aux OUs (et activer les liens)
Write-Host "`n[5/5] Liaison de la GPO aux OUs..." -ForegroundColor Yellow
$ous = @(
"OU=Users,OU=Creative,$rootOU",
"OU=Users,OU=Marketing,$rootOU"
)
foreach ($ou in $ous) {
try {
# Vérifier si le lien existe
$inheritance = Get-GPInheritance -Target $ou -ErrorAction Stop
$existingLink = $inheritance.GpoLinks | Where-Object {$_.DisplayName -eq $gpoName}
if ($existingLink) {
if ($existingLink.Enabled -eq $false) {
# Lien existe mais est désactivé - l'activer
Set-GPLink -Name $gpoName -Target $ou -LinkEnabled Yes -ErrorAction Stop
Write-Host " ✓ Lien activé pour $ou" -ForegroundColor Green
} else {
Write-Host " Le lien existe déjà et est activé pour $ou" -ForegroundColor Yellow
}
} else {
# Créer le lien
New-GPLink -Name $gpoName -Target $ou -LinkEnabled Yes -ErrorAction Stop
Write-Host " ✓ GPO liée à $ou" -ForegroundColor Green
}
} catch {
Write-Host " ✗ ERREUR pour $ou : $($_.Exception.Message)" -ForegroundColor Red
}
}
# VÉRIFICATION FINALE
Write-Host "`n========================================" -ForegroundColor Green
Write-Host " TROUBLESHOOTING TERMINÉ" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host "`nRécapitulatif de la solution:" -ForegroundColor Cyan
Write-Host " 1. Groupe 'GG-CreativeHub-Juniors' créé" -ForegroundColor White
Write-Host " 2. Utilisateurs juniors ajoutés au groupe (Élise, Damien, Julien)" -ForegroundColor White
Write-Host " 3. Filtrage de sécurité configuré (uniquement groupe Juniors)" -ForegroundColor White
Write-Host " 4. GPO liée et activée sur Creative\Users et Marketing\Users" -ForegroundColor White
Write-Host "`nMembres du groupe Juniors:" -ForegroundColor Cyan
$members = Get-ADGroupMember -Identity $groupName
foreach ($member in $members) {
$userDetails = Get-ADUser -Identity $member.SamAccountName -Properties Title, Department
Write-Host " - $($member.Name) ($($userDetails.Department) - $($userDetails.Title))" -ForegroundColor White
}
Write-Host "`nFiltrage de sécurité de la GPO:" -ForegroundColor Cyan
$permissions = Get-GPPermissions -Name $gpoName -All | Where-Object {$_.Permission -eq "GpoApply"}
foreach ($perm in $permissions) {
Write-Host " - $($perm.Trustee.Name) (Permission: $($perm.Permission))" -ForegroundColor White
}
Write-Host "`nLiens GPO:" -ForegroundColor Cyan
foreach ($ou in $ous) {
$inheritance = Get-GPInheritance -Target $ou
$link = $inheritance.GpoLinks | Where-Object {$_.DisplayName -eq $gpoName}
if ($link) {
Write-Host " - $ou (Activé: $($link.Enabled))" -ForegroundColor White
}
}
Write-Host "`n✅ La GPO devrait maintenant s'appliquer UNIQUEMENT aux utilisateurs juniors !" -ForegroundColor Green
Write-Host "`nPour tester:" -ForegroundColor Yellow
Write-Host " Sur un poste client, exécuter:" -ForegroundColor Gray
Write-Host " gpupdate /force" -ForegroundColor Gray
Write-Host " gpresult /r /scope:user /user:julien" -ForegroundColor Gray
Explication de la Solution
Problème Principal : Filtrage de Sécurité
Par défaut, une GPO s'applique à "Authenticated Users" (tous les utilisateurs authentifiés du domaine). Pour limiter l'application à un groupe spécifique :
- Retirer "Authenticated Users" de la section "Filtrage de sécurité"
- Ajouter le groupe cible ("GG-CreativeHub-Juniors")
- Le groupe doit avoir deux permissions :
- Lecture (Read) - pour lire la GPO
- Appliquer la stratégie de groupe (GpoApply) - pour que la GPO s'applique
Problèmes Secondaires
- Lien désactivé : Vérifier que
Set-GPLink -LinkEnabled Yes - Ordre de priorité : Si plusieurs GPOs, vérifier l'ordre (last applied wins)
- Héritage bloqué : Vérifier qu'il n'y a pas de "Block Inheritance" sur les OUs
Points Clés à Retenir
Méthodologie de Troubleshooting GPO
- Vérifier l'existence : La GPO existe-t-elle ?
- Vérifier les paramètres : Les configurations sont-elles correctes ?
- Vérifier les liens : La GPO est-elle liée aux bonnes OUs ?
- Vérifier l'état des liens : Les liens sont-ils activés ?
- Vérifier le filtrage de sécurité : Qui peut recevoir la GPO ?
- Vérifier l'héritage : Y a-t-il des blocages d'héritage ?
- Vérifier l'ordre de priorité : En cas de conflit, quelle GPO gagne ?
- Forcer l'application :
gpupdate /force - Tester :
gpresult /r
Outils de Diagnostic
| Outil | Commande | Usage |
|---|---|---|
| GPMC | gpmc.msc |
Interface graphique pour gérer les GPO |
| gpupdate | gpupdate /force |
Forcer l'application immédiate des GPO |
| gpresult | gpresult /r /scope:user |
Voir les GPO appliquées à un utilisateur |
| Get-GPO | Get-GPO -All |
Lister toutes les GPO via PowerShell |
| Get-GPInheritance | Get-GPInheritance -Target "OU=..." |
Voir les GPO héritées par une OU |
| Get-GPPermissions | Get-GPPermissions -Name "GPO" -All |
Voir les permissions d'une GPO |
Filtrage de Sécurité vs WMI Filtering
| Critère | Security Filtering | WMI Filtering |
|---|---|---|
| Basé sur | Groupes AD | Requêtes WMI (matériel, OS, etc.) |
| Performance | Rapide | Plus lent (évalue une requête) |
| Usage | Cibler des utilisateurs/ordinateurs spécifiques | Cibler selon des caractéristiques techniques |
| Exemple | "Appliquer uniquement aux juniors" | "Appliquer uniquement aux PC avec Windows 11" |
Dépannage (Erreurs Courantes)
| Problème | Cause | Solution |
|---|---|---|
| GPO ne s'applique toujours pas après gpupdate | Cache GPO corrompu | gpupdate /force /sync ou redémarrer le poste |
| "Authenticated Users" ne peut pas être retiré | Nécessaire pour certaines opérations | Utiliser Set-GPPermissions -PermissionLevel None |
| Le groupe n'apparaît pas dans le filtrage | Délai de réplication AD | Attendre quelques minutes ou forcer la réplication |
| Conflit entre plusieurs GPO | Ordre de priorité incorrect | Ajuster l'ordre dans GPMC ou utiliser "Enforced" |
Pour Aller Plus Loin
RSoP (Resultant Set of Policy)
# Voir toutes les GPO appliquées à un utilisateur spécifique sur un ordinateur spécifique
Get-GPResultantSetOfPolicy -Computer "DESKTOP-01" -User "MAXTEC\julien" -ReportType Html -Path "C:\Temp\RSoP.html"
Audit de l'Application des GPO
# Générer un rapport de toutes les GPO et leurs liens
Get-GPO -All | ForEach-Object {
$gpoName = $_.DisplayName
$links = (Get-ADObject -Filter {gpLink -like "*$($_.Id)*"} -Properties gpLink).DistinguishedName
[PSCustomObject]@{
GPOName = $gpoName
Links = $links -join "; "
}
} | Export-Csv -Path "C:\Temp\GPO_Audit.csv" -NoTypeInformation
Exercice Suivant Suggéré
Exercice 9 : Scénario de crise - Incident de sécurité multi-facettes avec audit complet