On commence par exporter les GPO au format XML.
Pour ça, on exécute les commandes suivantes:
$GPOs = Get-GPO -All
Foreach ($GPO in $GPOs) {$Name = $GPO.displayName ; Get-GPOReport -Guid $GPO.ID -ReportType xml >> C:\temp\$Name.xml}
Vous avez maintenant un fichier XML par GPO, nommé comme la GPO, dans le dossier C:\temp
Copier le tout dans un dossier « audit » à la racine de C.
Exécuter gpo2sql pour convertir les fichiers XML en fichiers importables dans une base SQL.
Ce qui donne:
Se rendre dans le dossier d’export pour vérifier le contenu des fichiers
Les fichiers fmt contiennent la structure de la table:
Les fichiers tsv contiennent le contenu de la table:
Il ne reste plus qu’à exécuter votre fichier « import.sql ».
Une fois importée, se rendre dans la table dbo.gpo pour vérifier le nombre de gpo importées.
Maintenant que votre base de données est créée, vous n’avez plus qu’à jouer de la requête.
*****GPO contenant le mot test*****
SELECT * FROM [GPODB2].[dbo].[gpo]
WHERE Name like (‘%test%’);
*****GPO vides*****
SELECT * FROM gpo
WHERE Computer_VersionDirectory = 0 and User_VersionDirectory = 0;
*****Listing script*****
SELECT command, count (*) FROM script
GROUP BY Command;
*****GPO désactivation pare-feu domaine*****
SELECT * FROM firewall_profile
WHERE Profile=’Domain’
AND DefaultInboundAction=0;
*****Arrêt NLA*****
SELECT * FROM registry_policy
WHERE Name like ‘%network level authentification%’
AND State = ‘Disabled’;
*****Différence synchro serveur AD*****
SELECT * FROM gpo
WHERE Computer_VersionDirectory != Computer_VersionSysvol
OR User_VersionDirectory != User_VersionSysvol;
*****GPO désactivée*****
SELECT * FROM gpo
WHERE Computer_Enabled = 0
AND User_Enabled = 0;
*****Différence version ID.GPO entre deux tables*****
SELECT A.Name, A.id_gpo from GPODB2.dbo.gpo A inner join GPODB.dbo.gpo B on (A.Computer_VersionDirectory = B.Computer_VersionDirectory and A.Name =B.Name)
WHERE A.id_gpo != B.id_gpo;
source: https://github.com/aurel26/gpo2sql