Comment créer un rapport HTML de toutes les GPO avec PowerShell ?
Sommaire
I. Présentation
La console GPMC, appelée également "Gestion de stratégie de groupe" permet de générer un rapport pour chaque GPO. Ce rapport peut-être enregistré au format HTML pour une consultation extérieure. Néanmoins, la console GPMC ne permet pas de faire un seul rapport qui va regrouper toutes les GPO, il est nécessaire de générer un rapport HTML par GPO... Et de jouer du clic !
Ce travail fastidieux peut être remplacé par une commande PowerShell qui va permettre de générer un rapport HTML de toutes les GPOs. Bien utile, notamment en phase d'audit, je vous explique comment procéder.
II. Get-GPOReport : réaliser un export HTML de toutes les GPO
Le cmdlet "Get-GPOReport" sert à générer un rapport pour une stratégie de groupe, voire plusieurs. Si l'on précise le paramètre -All, on va pouvoir intégrer toutes les GPO à ce rapport : une bonne nouvelle puisque cela signifie que Microsoft a prévu le coup ?.
On va le coupler au paramètre -ReportType qui sert à spécifier le format, on prendra le type "html", tout en sachant que l'autre valeur disponible est "xml". Enfin, le paramètre -Path va permettre de spécifier le chemin vers le fichier à générer, par exemple "C:\Scripting\GPO-All.html".
Get-GPOReport -All -ReportType Html -Path "C:\Scripts\GPO-All.html"
La génération du fichier peut prendre plusieurs minutes et la taille du fichier varier fortement. S'il y a plusieurs dizaines de GPO, le fichier peut faire plusieurs dizaines de méga-octets.
Le fichier global va contenir chaque GPO, et à chaque fois, vous allez obtenir différentes informations comme pour un rapport unique : nom de la GPO, filtrage de sécurité, numéros de version, liaisons, et surtout les paramètres configurés.
Il y a une autre manière de faire : créer un rapport HTML pour toutes les GPO mais avec un rapport HTML par GPO, plutôt qu'un rapport global comme nous venons de le faire. Dans ce cas, il faut utiliser Get-GPO pour récupérer la liste des GPO et utiliser une boucle ForEach.
On va stocker tous les rapports dans le dossier "C:\Scripts" avec un rapport nommé sous la forme : "GPO_<Nom-de-la-GPO>.html". Voici la commande :
Get-GPO -All | Foreach{ Get-GPOReport -Guid $_.Id -ReportType Html -Path "C:\Scripts\GPO_$($_.DisplayName).html" }
Ce qui donne, par exemple :
III. Comment générer le rapport d'une seule GPO ?
Pour générer le rapport d'une seule GPO à l'aide de PowerShell, c'est possible aussi, avec le même cmdlet : Get-GPOReport.
Pour créer un rapport HTML pour une seule GPO, on peut identifier la GPO par son nom ou son GUID. Par exemple, pour générer le rapport HTML uniquement de la GPO "C_Deploy_Edge_Chromium", on utilisera cette commande :
Get-GPOReport -Name "C_Deploy_Edge_Chromium" -ReportType Html -Path "C:\Scripts\GPO_C_Deploy_Edge_Chromium.html"
Il conviendra d'utiliser le paramètre -Guid à la place de -Name pour spécifier un GUID au lieu du nom de la GPO.
IV. Générer un rapport HTML pour une sélection de GPO
Grâce à Get-GPO couplé à l'utilisation de Get-GPOReport, puis à un filtre avec Where-Object, on va pouvoir générer un rapport HTML pour une sélection de GPO. C'est surtout intéressant si vous avez une convention de nommage pour vos GPO.
Prenons un exemple : je gère une infrastructure multisites et toutes les GPO du site de Caen ont un nom qui commence par "CAEN_". De cette façon, on peut facilement ajouter un filtre avec Where pour générer le rapport uniquement pour les GPO qui ont un nom qui correspond au filtre.
Ce qui donne :
Get-GPO -All | Where{ $_.DisplayName -like "CAEN_*" } | foreach{ Get-GPOReport -Guid $_.Id -ReportType Html -Path "C:\scripts\GPO_$($_.DisplayName).html" }
On pourrait prendre un autre exemple et cibler toutes les GPO qui ont un mot dans leur nom, par exemple "PC" :
Get-GPO -All | Where{ $_.DisplayName -like "*PC*" } | foreach{ Get-GPOReport -Guid $_.Id -ReportType Html -Path "C:\scripts\GPO_$($_.DisplayName).html" }
L'export des GPO au format XML est très intéressant pour générer des rapports personnalisés : le format XML n'est pas forcément agréable à lire pour nous les humains. Pour un script PowerShell, ce n'est que du bonheur grâce aux balises du code XML : on peut générer toute sorte de rapport qui va croiser les informations des différentes GPO. Par exemple : un résumé des liaisons de toutes les GPO dans un tableau unique.
Est-ce que cela vous intéresse d'avoir une suite à cet article pour explorer les rapports de GPO au format XML ?
Bonjour,
très bonne synthèse. J’avoue être interessé par la version en exportxml, et surtout voir comment les reformater simplement (CSS ?) pour pouvoir les importer proprement dans un document word. Avec la version html c’est toujours un cauchemar …
Hello, très bon article, j’utilisais la bonne vieille méthode en invite de commande GPRESULT /H.
Un article qui serais intéressant serait comment se sortir du pétrin avec des fichiers ADMX corrompus, avec une méthode qui marche à tous les coups ? J’ai réparé une fois ce magasin mais force est de constater que ce problème deviens récurent…
Merci !