Создание динамической группы в Active Directory с пользователями из подразделения
Я хотел бы создать динамическую группу с пользователями из определенного подразделения в моем Active Directory. Я могу сделать это прекрасно, используя Exchange Dynamic Distribution List, но, конечно, Ex DDL только для почты.
Есть ли способ создать это? Я нашел несколько руководств, использующих System Center, чтобы справиться с этим, но System Center не вариант.
Заранее спасибо,
5 ответов
В Active Directory нет такой вещи, как динамическая группа безопасности, только динамические группы рассылки.
Я думаю, что для этого наиболее приемлемым вариантом было бы наличие сценария Powershell, определяющего, кто входит в данное подразделение, и соответствующим образом обновляющего группу безопасности, возможно, так:
Import-Module ActiveDirectory
$groupname = PseudoDynamicGroup
$users = Get-ADUser -Filter * -SearchBase "ou=desiredUsers,dc=domain,dc=tld"
foreach($user in $users)
{
Add-ADGroupMember -Identity $groupname -Member $user.samaccountname -ErrorAction SilentlyContinue
}
$members = Get-ADGroupMember -Identity $groupname
foreach($member in $members)
{
if($member.distinguishedname -notlike "*ou=desiredUsers,dc=domain,dc=tld*")
{
Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname
}
}
Я отвечаю на свой вопрос. С идеями PowerShell Матиаса я нашел это в Интернете:
https://github.com/davegreen/shadowGroupSync
Характеристики
- Синхронизируйте объекты пользователя или компьютера из одного или нескольких подразделений в одну группу.
- Возможность фильтрации объектов, включенных в теневую группу, с помощью фильтра PowerShell Active Directory.
- Возможность выбора типа теневой группы (Security/Distribution).
Авторский блог содержит дополнительную информацию о дизайне и мотивах инструмента.
Это можно сделать с помощью Adaxes. Технически это будет динамически обновлять членство в группе после обновления / перемещения пользователей. Вот пример того, как автоматически поддерживать членство в группе на основе атрибута Department, но его очень легко изменить, чтобы сделать то же самое на основе OU. http://www.adaxes.com/tutorials_AutomatingDailyTasks_AddUsersToGroupsByDepartment.htm
Самый простой способ - использовать DynamicGroup. http://www.firstattribute.com/en/active-directory/ad-automation/dynamic-groups/
Мы запускаем его в различных средах после перехода с Novell на Active Directory.
Это программное обеспечение для автоматического создания групп OU, групп отделов и так далее. Просто создайте фильтр и все.
Я также искал способ создания динамических групп безопасности в Active Directory и пришел к выводу, что Матиас. Мое решение было не таким элегантным, как его, я использую запланированный сценарий powershell, чтобы удалить всех пользователей из групп, а затем заполнить их пользователями в подразделении. Кроме того, я позаботился о том, чтобы группы подчиненных подразделений были добавлены в группу безопасности родительских подразделений, где они были установлены.
import-module ActiveDirectory
Get-ADGroupMember OU_GroupName | % { Remove-ADGroupMember 'OU_GroupName' -Members $_ -Confirm:$false}
Get-ADUser -SearchBase 'OU=OUName,OU=ParentOUName,DC=DomainName,DC=TopDomainName' -Searchscope 1 -Filter * | % { Add-ADGroupMember 'OU_GroupName' -Members $_ }
Add-ADGroupMember -Identity "OU_ParentName" -Members "OU_ChildOneName", "OU_ChildTwoName", "OU_ChildThreeName"
Не уверен, хорошо ли это масштабируется в большой компании, но в нашей компании из 300 пользователей этот скрипт занимает всего несколько минут.
К заявлению оставлен другой участник. Если вы не запускаете это из контроллера домена, вам нужно будет либо предоставить статическую запись, заменив $ domainController, либо вы можете добавить другую, затем $DomainController и передать эту информацию.
Чтобы добавить пользователя в группу
Function AddUserToGroup($Group, $User, $DomainController)
{
if(!(Get-ADGroupMember -Identity $group | ?{$_.name -eq $User}))
{
Add-ADGroupMember -Identity $group -Members $User -Server $DomainController
}
else
{
return "The user: $User is already in the $group"
}
}
Чтобы удалить пользователя, вы можете сделать то же самое.
Function RemoveUserFromGroup($Group, $User, $DomainController)
{
if((Get-ADGroupMember -Identity $group | ?{$_.name -eq $User}))
{
Remove-ADGroupMember -Identity $group -Members $User -Server $DomainController
}
else
{
return "The user: $User is not a member of $group"
}
}
Теперь, чтобы использовать это, вы можете сделать это...
$Users = Get-Aduser -Filter *
Foreach($user in $users)
{
AddUserToGroup "SomeGroup" $user.name "ServerName"
}
или же
Было бы лучше иметь OU для отключенных пользователей или что-то такое, где это может иметь место, или если вы переключаете OU, такие как сайт или группа
$Users = Get-Aduser -Filter *
Foreach($user in $users)
{
RemoveUserToGroup "SomeGroup" $user.name "ServerName"
}