Quelles sont les GPO modifiées dans les 24 dernières heures ?

I. Présentation

L'audit et la surveillance de son infrastructure sont essentiels, l'Active Directory n'échappe pas à cette règle, que ce soit pour journaliser les actions de création, modification et suppression d'un utilisateur, la connexion d'un utilisateur sur un poste, etc... Il peut être également intéressant de garder un œil sur les stratégies de groupe (GPO), notamment sur les dernières GPO modifiées. Sait-on jamais, s'il y avait une modification anormale...

Avec la méthode que l'on va voir, par script PowerShell, vous pourrez ensuite le faire tourner en automatique sur l'un de vos contrôleurs de domaine, et, pourquoi pas vous envoyer un rapport chaque jour ou semaine pour savoir quelles sont les GPO modifiées récemment.

II. Voir les GPO modifiées via PowerShell

Pour parvenir à visualiser de manière simple quelles sont les GPO modifiées récemment, il est nécessaire de passer par un script, car la console graphique de gestion des GPO ne permet pas d'avoir cette vue d'ensemble.

Pour ma part, j'ai pris le temps de coder une fonction pour afficher les GPO modifiées sur les X derniers jours, je vous glisse le code de cette fonction ci-dessous, accompagnée de son lot d'explications.

function Show-GPOEditLastXDays{
     
     # Deux paramètres obligatoires, le premier pour le nom complet du domaine
     # et le second pour le nombre de jours à prendre en compte pour détecter les modifs
     param(
     [parameter(Mandatory=$true)][string]$DomainName,
     [parameter(Mandatory=$true)][int]$LastXDays
     )

# Création d'un objet COM pour utiliser l'API de la console GPMC
$GPM = New-Object -ComObject GPMgmt.GPM

try{

  # Etablir la connexion avec le domaine AD
  $GPMDomain =$GPM.GetDomain("$DomainName", "", $GPMConstants.UseAnyDC)
 
  # Définir un critère de recherche, en l'occurrence vide car on voudra toutes les GPO
  $GPMSearchCriteria = $GPM.CreateSearchCriteria()
 
  # Récupérer la liste de toutes les GPO du domaine
  $GPMAllGpos = $GPMDomain.SearchGPOs($GPMSearchCriteria)

  # Initialiser le compteur, sera incrémenté pour compter le nombre de GPO modifiées
  $Counter = 0

  # Pour chaque GPO, on regarde si elle a été modifiée depuis les X derniers jours
  # Selon la valeur du paramètre "$LastXDays"
  foreach ($GPO in $GPMAllGpos) {

    if ($GPO.ModificationTime -ge (Get-Date).AddDays(-$LastXDays)) {

    # Pour chaque GPO qui matche, on crée un objet custom
    # contenant le nom de la GPO et la date de dernière modification
    [PSCustomObject] @{
    "GPOName" = $GPO.DisplayName ;
    "GPOModificationTime" = $GPO.ModificationTime
    }

    $Counter++
    }

  } # foreach ($GPO in $GPMAllGpos)
 
  # Si le compteur est égal à 0 c'est qu'il n'y a pas eu de GPO modifiées
  # donc on donne l'info dans la console, pour éviter une sortie vide
  if($Counter -eq 0){
     Write-Output "0 GPO modified in the last $LastXDays day(s)"
  } # if($Counter -eq 0)

}catch{

  Write-Output "ERROR ! Impossible to get the list of edited GPO, it's possible that the domain name is incorrect"
 
 }
}

Maintenant, si l'on exécute la fonction, avec les bons arguments, par exemple :

Show-GPOEditLastXDays -DomainName "it-connect.local" -LastXDays 7

On voit qu'un tableau est retourné avec 2 colonnes correspondantes au nom de la GPO et à la date de dernière modification. Bien entendu, la liste contient uniquement les GPO modifiées lors des 7 derniers jours, pour obtenir les GPO modifiées sur les dernières 24 heures, il suffit d'indiquer "1" pour l'option LastXDays.

Par curiosité, on peut ouvrir la console des GPO sur le serveur pour vérifier que les infos sont bonnes, ce qui est bien le cas ! 🙂

Avec cette API très puissante pour la gestion des GPO, il est possible de faire beaucoup de choses... comme créer une GPO ou dupliquer une GPO, en plus de pouvoir explorer toutes les propriétés. Il y a possibilité de faire de belles choses notamment en matière d'audit. 🙂

Retrouvez le script sur mon GitHub : Audit - Quelles sont les GPO modifiées lors des X derniers jours ?

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Co-Fondateur d'IT-Connect, je souhaite partager mes connaissances et expériences avec vous, et comme la veille techno' est importante je partage aussi des actus.

florian a publié 1601 articles sur IT-Connect.See all posts by florian

4 réactions sur “Quelles sont les GPO modifiées dans les 24 dernières heures ?

  • 29/07/2017 à 09:12
    Permalink

    Avoir un contrôle de ses GPO est essentiel, et la méthode consistant à s’informer sur d’éventuelles modifications des GPO de sont Contrôleur de domaine est essentiel. Le script peut éventuellement être également configuré pour envoyer les mail et où que l’on soit, on peut continuer à monitorer son AD.

    Merci pour tous!

    Répondre
    • 27/09/2017 à 09:14
      Permalink

      Bonjour,

      Merci pour le tutoriel Florian.

      Si l’on souhaite que les rapports soient envoyés par mail, comment faut-il procéder dans le script Powershell ?

      Merci par avance.
      Bonne journée.

      Répondre
  • 27/09/2017 à 00:13
    Permalink

    Merci pour le tutoriel, ça fonctionne très bien.

    Comment faut-il s’y prendre si l’on souhaite que le rapport soit envoyé par mail ?

    Merci

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *