К примеру, мы хотим отслеживать изменение группы администраторов домена, и в случае добавления в нее нового пользователя получать соответствующее уведомление (письмом или всплывающим окошком).
Есть два варианта организации такого решения:
- Можно включить аудит событий на контроллерах домена и отслеживание появление события добавления пользователя в группу безопасности (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
Таким образом состав группы администраторов будет проверяться один раз в день и в случае наличия изменений администратор будет получать уведомление (всплывающим сообщением или письмом).