16657 shaares
Show-GPOEditLastXDays -DomainName "my-domain.tld" -LastXDays 7
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"
}
}