В некоторых сценариях для предоставления доступа в Active Directory удобно было бы использовать динамические группы безопасности. Идея динамической группы в том, что ее состав автоматически формируется на основе заданных параметров. Например, местоположении пользователя (город, OU), работе в определенном отделе, должности и т.д. Пользователи должны автоматически добавляться или исключаться из такой группы в зависимости от текущих значений их атрибутов.
В этой статье мы рассмотрим пример 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
-
Get-ADUser
– получить информацию о пользователе -
Add-ADGroupMember
,Get-ADGroupMember
иRemove-ADGroupMember
— командлеты управления группами AD
Если вы хотите использовать динамические группы для компьютеров, нужно использовать командлеты
Get-ADComputer
,
Add-ADGroupMember
и
Remove-ADGroupMember
.
Запустите скрипт и проверьте, что в группу mskSales были добавлены все пользователи из целевых OU, у которых в поле Department указано
Отдел продаж
. Все пользователи, которые не соответствуют этим критериям исключаются из этой группы.
Для регулярного обновления членства в динамической группе, настройте в планировщике Task Scheduler на контроллере домена задание, которое будет запускать указанный PowerShell скрипт каждые 2 часа.
В параметрах задания укажите:
Program/script:
powershell.exe
Add arguments (optional):
-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File "C:\PS\dynamic_group_sales_department.ps1"
Этот PowerShell скрипт можно использовать в качестве каркаса для создания ваших собственных правил формирования динамических групп в AD.