Auditer des GPO – Partie 2

Export des GPO en XML

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.

Préparer l’import SQL

Exécuter gpo2sql pour convertir les fichiers XML en fichiers importables dans une base SQL.

Fonctionnement de gpo2sql.

Ce qui donne:

Dans cette exemple ma BDD s’appellera GPODB2.

Se rendre dans le dossier d’export pour vérifier le contenu des fichiers

Voici ce que vous devriez trouver dans votre dossier d’export.

Les fichiers fmt contiennent la structure de la table:

Les fichiers tsv contiennent le contenu de la table:

Import SQL

Il ne reste plus qu’à exécuter votre fichier « import.sql ».

Vérifier le nom de votre BDD
Vérifier les chemins d’import.

Une fois importée, se rendre dans la table dbo.gpo pour vérifier le nombre de gpo importées.

En rouge, le nom de vos GPOs

Maintenant que votre base de données est créée, vous n’avez plus qu’à jouer de la requête.

Exemple de requêtes SQL

*****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