Внедряем динамические группы в Active Directory с помощью PowerShell

В некоторых сценариях для предоставления доступа в Active Directory удобно было бы использовать динамические группы безопасности. Идея динамической группы в том, что ее состав автоматически формируется на основе заданных параметров. Например, местоположении пользователя (город, OU), работе в определенном отделе, должности и т.д. Пользователи должны автоматически добавляться или исключаться из такой группы в зависимости от текущих значений их атрибутов.

В on-premises Active Directory, в отличии от облачного каталога Entra ID (ранее Azure AD), отсутствует встроенный функционал динамических групп безопасности. При наличии развернутого Exchange Server можно создавать динамические группы рассылки (Exchange Dynamic Distribution Groups, но такие объекты не являются группами безопасности и не могут быть использованы для предоставления доступа.

В этой статье мы рассмотрим пример PowerShell скрипта для реализации динамических групп в AD. Такой PowerShell скрипт должен запускаться по расписанию, выбирать пользователей из AD по определенному критерию, добавлять их в целевую группу AD и удалять из группы пользователей, которые перестали соответствовать критерию.

Рассмотрим пример простого PowerShell скрипта, который будет автоматически добавлять в группу всех пользователей из указанных OU и у которых в поле (Department) в AD указано “Отдел продаж”.

## Имя вашего домена AD
$ADDomain = 'dc=winitpro,dc=ru'
## Имя динамической группы
$ADGroupname = 'mskSales'
## Список OU для поиска пользователей
$ADOUs = @(
"OU=Users,OU=Accounts,OU=SPB,$ADDomain",
"OU=Users,OU=Accounts,OU=MSK,$ADDomain"
)
## Название отдела (поле Department), пользователей которого добавлять в группу
$DepartName="Отдел продаж"
$users = @()
# Выбираем пользователей, соответствующим критериям в указанных OU
foreach($OU in $ADOUs){
$users += Get-ADUser -SearchBase $OU -Filter {Department -like $DepartName}
}
# Добавляем пользователей в целевую группу безопасности
foreach($user in $users){
Add-ADGroupMember -Identity $ADGroupname $user.samaccountname -ErrorAction SilentlyContinue
}
# Теперь проверим всех пользователей группы на соответствие критериям выборки и, если пользователь не соответствует (перенесен в другую OU, изменен отдел), исключаем его из группы
$members = Get-ADGroupMember -Identity $ADGroupname
foreach($member in $members) {
$UserOU=($member.distinguishedname -split ',', 2)[1]
if($ADOUs -notcontains $UserOU){Remove-ADGroupMember -Identity $ADGroupname -Member $member.samaccountname -Confirm:$false}
if ((Get-ADUser -identity $member -properties Department|Select-Object Department).department -notlike $DepartName ){Remove-ADGroupMember -Identity $ADGroupname -Member $member.samaccountname -Confirm:$false}
}

Чтобы удалить из группы пользователей, которые не соответствуют критерию, в некоторых случая проще полностью очищать группу в начале скрипта:
Get-ADGroup $ADGroupname | Set-ADGroup -Clear member

PowerShell скрипт для реализации динамической группы пользователй AD по определенным критериям

В скрипте используются следующие командлеты из модуля PowerShell Active Directory:

Если вы хотите использовать динамические группы для компьютеров, нужно использовать командлеты Get-ADComputer , Add-ADGroupMember и Remove-ADGroupMember .

Запустите скрипт и проверьте, что в группу mskSales были добавлены все пользователи из целевых OU, у которых в поле Department указано Отдел продаж . Все пользователи, которые не соответствуют этим критериям исключаются из этой группы.

powershell скрипт для формирования динамических группо пользователей в AD

Для регулярного обновления членства в динамической группе, настройте в планировщике Task Scheduler на контроллере домена задание, которое будет запускать указанный PowerShell скрипт каждые 2 часа.

В параметрах задания укажите:

Program/script: powershell.exe
Add arguments (optional): -ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File "C:\PS\dynamic_group_sales_department.ps1"

Задание планировщика для запуска скрипта обновления членства пользователей в динамической группе

Не рекомендуется запускать скрипты из-под администратора домена. Лучше создать простую учетную запись и делегировать ей права в AD, или использовать сервисную учетную запись gMSA.

Этот PowerShell скрипт можно использовать в качестве каркаса для создания ваших собственных правил формирования динамических групп в AD.


Предыдущая статья Следующая статья


Комментариев: 12 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)