Оповещение при добавлении пользователя в группу Active Directory

К примеру, мы хотим отслеживать изменение группы администраторов домена, и в случае добавления в нее нового пользователя получать соответствующее уведомление (письмом или всплывающим окошком).

Есть два варианта организации такого решения:

  • Можно включить аудит событий на контроллерах домена и отслеживание появление события добавления пользователя в группу безопасности (EventID 4728)
  • Хранить локальный текстовый файл со списком пользователей в определенной группе и периодически сравнивать его с текущими членами доменной группы

Наиболее интересным мне показалось второе решение – сравнение текущего состава доменной группы с шаблоном.

С помощью командлета Get-ADGroupMember выведем список пользователей в группе Domain Admin и сохраним полученный список в текстовый файл (строим рекурсивный список пользователей, с учетом вложенных групп).

(Get-ADGroupMember -Identity "Domain Admins" -recursive).Name | Out-File C:\PS\DomainAdmins.txt

Теперь добавим в группу Domain Admins нового пользователя и еще раз сохраним список пользователей, но уже во второй файл.

(Get-ADGroupMember -Identity "Domain Admins" -recursive).Name | Out-File C:\PS\DomainAdminsCurrent.txt

Теперь сравним два файла и выведем на экран отличия в списках:

$oldadm=GC C:\PS\DomainAdmins.txt
$newadm=GC C:\PS\DomainAdminsCurrent.txt
$diff=Compare-Object -ReferenceObject $oldadm -DifferenceObject $newadm | Select-Object -ExpandProperty InputObject
write-host $diff

На экран вывелась учетная запись, которого добавили в группу AD.

Можно вывести сообщение в консоль:

$result=(Compare-Object -ReferenceObject $oldadm -DifferenceObject $diff | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object -ExpandProperty InputObject) -join ", "
If ($result)
{msg * "В группу Domain Admins добавлен пользователь: $result"}

Или отправить письмо с помощью командлета Send-MailMessage:

If ($result)
{Send-MailMessage -SmtpServer msg01 -From ADChanges@trakrd.ru -To admin@trakrd.ru -Subject "В группу Domain Admins добавлен пользователь: $result " -Body "Сообщение создано $date" -Priority High}

Данный скрипт можно сохранить в файл admins_group_changes.ps1 и запускать регулярно с помощью планировщика (как создать задание планировщика с помощью PowerShell). Создадим новое задание планировщика, которое раз в сутки запускает наш PowerShell скрипт, коорый выполняет сверку состава группы доменных администраторов с локально сохраненным списком.

$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\admins_group_changes.ps1 "
Register-ScheduledTask -TaskName "Check Admins Group" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

Таким образом состав группы администраторов будет проверяться один раз в день и в случае наличия изменений администратор будет получать уведомление (всплывающим сообщением или письмом).