skip to content

Recherche

GPO

Gestion des stratégies de groupe avec PowerShell - audit et export pour l'administration !

Windows
Publié le

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 GPOImport-Module GroupPolicy
✅ Vérifier moduleGet-Module GroupPolicy
🔍 Lister cmdlets GPOGet-Command -Module GroupPolicy
📋 Aide cmdletGet-Help Get-GPO -Examples

📋 Consultation des GPO

📌 Action🧠 Commande PowerShell
📜 Lister toutes les GPOGet-GPO -All
🔍 Rechercher une GPOGet-GPO -Name "Strategie-Compta"
👁️ Détails d’une GPOGet-GPO -Name "Strategie-Compta" | Select-Object *
🔗 GPO liées à une OUGet-GPInheritance -Target "OU=Comptabilite,DC=entreprise,DC=com"
🖥️ GPO appliquées à un PCGet-GPResultantSetOfPolicy -Computer "PC-COMPTA-01"
👤 GPO d’un utilisateurGet-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 GPOgpupdate /force
📊 Voir GPO appliquéesgpresult /r
👤 GPO scope utilisateurgpresult /scope user /r
🖥️ GPO scope ordinateurgpresult /scope computer /r
📄 Rapport GPO utilisateurgpresult /user jdupont /h C:\temp\gpo_user.html
🖥️ Rapport GPO ordinateurgpresult /computer PC-COMPTA-01 /h C:\temp\gpo_pc.html
🔍 Test résultante GPOGet-GPResultantSetOfPolicy -ReportType Html -Path C:\temp\rsop.html

🚨 Dépannage courant

🆘 Problème🧠 Solution
Module GPO manquantInstall-WindowsFeature GPMC
GPO ne s’applique pasVérifier liens OU et ordre d’application
Permissions insuffisantesUtiliser compte admin du domaine
GPO corrompuedcgpofix pour restaurer GPO par défaut
Réplication lenteVérifier repadmin /showrepl