Voir les dernières GPO modifiées sur le domaine

Pour afficher l'historique des GPO modifiées sur un temps donné (en nombre de jours), utiliser le script PowerShell suivant en adaptant la dernière ligne :

Il faut un compte administrateur du domaine pour éxecuter ce script correctement

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"
 
 }
}
 
Show-GPOEditLastXDays -DomainName "domaine.local" -LastXDays 1