GPO (Group Policy Object) permet de configurer et gérer centralement les paramètres des utilisateurs et ordinateurs dans un domaine Active Directory.
📦 Préparation du module
📌 Action | 🧠 Commande PowerShell |
---|---|
📦 Importer module GPO | Import-Module GroupPolicy |
✅ Vérifier module | Get-Module GroupPolicy |
🔍 Lister cmdlets GPO | Get-Command -Module GroupPolicy |
📋 Aide cmdlet | Get-Help Get-GPO -Examples |
📋 Consultation des GPO
📌 Action | 🧠 Commande PowerShell |
---|---|
📜 Lister toutes les GPO | Get-GPO -All |
🔍 Rechercher une GPO | Get-GPO -Name "Strategie-Compta" |
👁️ Détails d’une GPO | Get-GPO -Name "Strategie-Compta" | Select-Object * |
🔗 GPO liées à une OU | Get-GPInheritance -Target "OU=Comptabilite,DC=entreprise,DC=com" |
🖥️ GPO appliquées à un PC | Get-GPResultantSetOfPolicy -Computer "PC-COMPTA-01" |
👤 GPO d’un utilisateur | Get-GPResultantSetOfPolicy -User "jdupont" |
📊 Scripts d’export essentiels
📋 Export liste complète des GPO
# Export de toutes les GPO avec infos essentielles
Get-GPO -All | Select-Object DisplayName, Id, GpoStatus, CreationTime, ModificationTime |
Export-Csv "C:\temp\gpo_liste_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
Write-Host "Export GPO terminé : C:\temp\gpo_liste_$(Get-Date -Format 'yyyyMMdd').csv"
🔗 Export des liens GPO par OU
# Audit des GPO liées aux OUs importantes
$OUs = @(
"OU=Direction,DC=entreprise,DC=com",
"OU=Comptabilite,DC=entreprise,DC=com",
"OU=Commercial,DC=entreprise,DC=com"
)
$rapport = foreach ($ou in $OUs) {
$links = Get-GPInheritance -Target $ou
foreach ($link in $links.GpoLinks) {
[PSCustomObject]@{
OU = $ou
GPOName = $link.DisplayName
Enabled = $link.Enabled
Enforced = $link.Enforced
Order = $link.Order
}
}
}
$rapport | Export-Csv "C:\temp\gpo_liens_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
Write-Host "Export liens GPO terminé"
📄 Export rapport HTML d’une GPO
# Génère un rapport HTML détaillé d'une GPO
$gpoName = "Strategie-Securite-Generale"
$reportPath = "C:\temp\rapport_$($gpoName)_$(Get-Date -Format 'yyyyMMdd').html"
Get-GPOReport -Name $gpoName -ReportType Html -Path $reportPath
Write-Host "Rapport GPO généré : $reportPath"
🛠️ Scripts d’audit utiles
🔍 GPO non utilisées (orphelines)
# Trouve les GPO qui ne sont liées à aucune OU
$allGPOs = Get-GPO -All
$unusedGPOs = @()
foreach ($gpo in $allGPOs) {
$links = [xml](Get-GPOReport -Guid $gpo.Id -ReportType Xml)
if (-not $links.GPO.LinksTo) {
$unusedGPOs += [PSCustomObject]@{
Name = $gpo.DisplayName
Id = $gpo.Id
CreationTime = $gpo.CreationTime
ModificationTime = $gpo.ModificationTime
}
}
}
$unusedGPOs | Export-Csv "C:\temp\gpo_orphelines_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
Write-Host "Trouvé $($unusedGPOs.Count) GPO orphelines"
⚠️ GPO désactivées ou problématiques
# Audit des GPO avec problèmes
Get-GPO -All | Where-Object {
$_.GpoStatus -eq "AllSettingsDisabled" -or
$_.GpoStatus -eq "UserSettingsDisabled" -or
$_.GpoStatus -eq "ComputerSettingsDisabled"
} | Select-Object DisplayName, GpoStatus, ModificationTime |
Export-Csv "C:\temp\gpo_desactivees_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
📈 Rapports de synthèse
📊 Statistiques GPO du domaine
# Vue d'ensemble des GPO
$allGPOs = Get-GPO -All
$enabledGPOs = $allGPOs | Where-Object {$_.GpoStatus -eq "Enabled"}
$disabledGPOs = $allGPOs | Where-Object {$_.GpoStatus -ne "Enabled"}
Write-Host "=== Statistiques GPO ===" -ForegroundColor Green
Write-Host "Total GPO: $($allGPOs.Count)"
Write-Host "GPO actives: $($enabledGPOs.Count)" -ForegroundColor Green
Write-Host "GPO désactivées: $($disabledGPOs.Count)" -ForegroundColor Yellow
Write-Host "GPO modifiées récemment (7j): $(($allGPOs | Where-Object {$_.ModificationTime -gt (Get-Date).AddDays(-7)}).Count)"
🔄 GPO récemment modifiées
# GPO modifiées dans les 30 derniers jours
$date = (Get-Date).AddDays(-30)
Get-GPO -All | Where-Object {$_.ModificationTime -gt $date} |
Select-Object DisplayName, ModificationTime |
Sort-Object ModificationTime -Descending |
Export-Csv "C:\temp\gpo_recentes_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
🎯 Commandes de dépannage
📌 Action | 🧠 Commande PowerShell |
---|---|
🔄 Forcer mise à jour GPO | gpupdate /force |
📊 Voir GPO appliquées | gpresult /r |
👤 GPO scope utilisateur | gpresult /scope user /r |
🖥️ GPO scope ordinateur | gpresult /scope computer /r |
📄 Rapport GPO utilisateur | gpresult /user jdupont /h C:\temp\gpo_user.html |
🖥️ Rapport GPO ordinateur | gpresult /computer PC-COMPTA-01 /h C:\temp\gpo_pc.html |
🔍 Test résultante GPO | Get-GPResultantSetOfPolicy -ReportType Html -Path C:\temp\rsop.html |
🚨 Dépannage courant
🆘 Problème | 🧠 Solution |
---|---|
Module GPO manquant | Install-WindowsFeature GPMC |
GPO ne s’applique pas | Vérifier liens OU et ordre d’application |
Permissions insuffisantes | Utiliser compte admin du domaine |
GPO corrompue | dcgpofix pour restaurer GPO par défaut |
Réplication lente | Vérifier repadmin /showrepl |