[Active Directory] – Supervision du groupe « DNS Admins » avec Powershell

par | Fév 28, 2026 | Active Directory, PowerShell, supervision | 0 commentaires

Lorsque l’on souhaite superviser la modification de groupes à privilèges dans l’Active Directory il faut surveiller les Events suivants:

  • EventId 4732: Ajout d’un membre dans le groupe
  • EventId 4733: Retrait d’un membre dans le groupe

Script

A l’aide des quelques lignes de Powershell ci dessous, vous pourrez superviser la modification de ce groupe.

Pour cela il vous est possible de l’intégrer dans une boucle à intervalle de 30 secondes (c’est le plus petit intervalle de temps que j’ai eu l’occasion d’essayer sur un AD de production) et d’envoyer les alertes par Mail ou dans un canal Teams via Microsoft Graph ou un relai SMTP.

 

Note:

Il faudra toutefois prendre soins de remplacer la commande « Write-Host » (présente pour le lab) par la méthode qui vous convient le mieux (Variable, sortie dans un fichier de logs, envoie de mail…).

# Variables
$Date = Get-Date
$FullDate = $Date.ToString("yyyy-MM-dd")
$PDC = $AllDC = Get-ADDomainController -Filter * | where {$_.OperationMasterRoles -contains "PDCEmulator"}
$PDC = $PDC.Name

# Check Modification Time for DNS Admins
$DnsAdminsProperties = Get-ADGroup "DNSAdmins" -Properties Modified -Server $PDC
$LastModifiedDay = ($DnsAdminsProperties.modified).ToString("yyyy-MM-dd")
$Details = $DnsAdminsProperties.modified
$StorageDns = $Details

# Looking for check if a modification was made today
If (($LastModifiedDay -eq $FullDate) -and ($Details -ne $LastModificationTimeDns)) {
    $EventDnsAdmin = Get-WinEvent -ComputerName $PDC -FilterHashtable @{LogName='Security';Id=4732,4733} -MaxEvents 200 | where {$_.TimeCreated -match $Details}
    $EventDnsAdmin | foreach {
        $TimeCreated = $_.TimeCreated
        $DnsAdminAction = $_
        If($DnsAdminAction.Properties[2].value -eq 'DnsAdmins') {
            $By = $DnsAdminAction.Properties[6].value
            $Account = $DnsAdminAction.Properties[0].value
            Switch ($DnsAdminAction.ID) {
                4732 {
                    Write-Host "$Account was added by $By on DnsAdmins Group at $Details"
                    }
                4733 {
                    Write-Host "$Account was removed by $By on DnsAdmins Group at $Details"
                    }
                }
            }
        }
    $LastModificationTimeDns = $StorageDns
    }
Else {
    $LastModificationTimeDns = $StorageDns
    }
    
# Release
$DnsAdminsProperties = $null
$LastModifiedDay = $null
$Details = $null

0 commentaires

Soumettre un commentaire

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