Создание динамической группы в Active Directory с пользователями из подразделения

8

Я хотел бы создать динамическую группу с пользователями из определенного подразделения в моем Active Directory. Я могу сделать это отлично, используя Exchange Dynamic Distribution List, но, конечно, Ex DDL только для почты.

Есть ли способ создать это? Я нашел несколько руководств, использующих System Center, чтобы справиться с этим, но System Center не вариант.

Заранее спасибо,

Винициус Ферран
источник

Ответы:

11

В 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
  }
}
Матиас Р. Ессен
источник
+1 Могу ли я периодически запускать такой скрипт в Active Directory, чтобы убедиться, что мои группы AD обновлены? Или может как-то подписаться на какую-то систему событий? Я разработчик, а не администратор, но я могу влиять на администратора и моего менеджера
Mzn
Сначала я бы удалил, просто чтобы он не перепроверял пользовательские объекты, которые мы только что проверили (и добавили)
xXhRQ8sD2L7Z
4

Я отвечаю на свой вопрос. С идеями PowerShell Матиаса я нашел это в Интернете:

https://github.com/davegreen/shadowGroupSync

особенности

  • Синхронизируйте объекты пользователя или компьютера из одного или нескольких подразделений в одну группу.
  • Возможность фильтрации объектов, включенных в теневую группу, с помощью фильтра PowerShell Active Directory.
  • Возможность выбора типа теневой группы (Security / Distribution).

В блоге автора содержит дополнительную информацию о конструкции и мотивов для инструмента.

Винициус Ферран
источник
1
Если Матиас был тем, кто помог тебе, тогда ты должен принять его ответ. Он дает вам понимание!
Mzn
3

Это можно сделать с помощью Adaxes. Технически это будет динамически обновлять членство в группе после обновления / перемещения пользователей. Вот пример того, как автоматически поддерживать членство в группе на основе атрибута Department, но его очень легко изменить, чтобы сделать то же самое на основе OU. http://www.adaxes.com/tutorials_AutomatingDailyTasks_AddUsersToGroupsByDepartment.htm

Антон Поздняков
источник
1

Я также искал способ создания динамических групп безопасности в 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 пользователей этот скрипт занимает всего несколько минут.

Эспен Олсен
источник
С практической точки зрения, ваше решение хорошо (для нескольких сотен пользователей). Однако, добавляя все сначала (и подавляя предупреждения / ошибки для дубликатов), а затем удаляя только несоответствия, вы: 1) минимизируете количество обновлений атрибутов объекта AD и 2) обходите риск того, что кто-то аутентифицирует и пропустит Security Сгруппируйте их по токену, если они появятся в сети во время работы вашего скрипта.
Матиас Р. Ессен
1

Самый простой способ - использовать DynamicGroup. http://www.firstattribute.com/en/active-directory/ad-automation/dynamic-groups/

Мы запускаем его в различных средах после перехода с Novell на Active Directory.

Это программное обеспечение для автоматического создания групп OU, групп отделов и так далее. Просто создайте фильтр и все.

Матиас
источник
0

К заявлению оставлен другой участник. Если вы не запускаете это из контроллера домена, вам нужно будет либо предоставить статическую запись, заменив $ 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"  
}

источник
Этот ответ не имеет смысла и не добавляет никакого значения к вопросу. Функции неэффективны и не дают никакой внутренней ценности; обе функции 1. удваивают количество выполняемых вызовов, 2. работают только в том случае, если используется CN пользователя (ограничивают функциональность собственных командлетов), 3. не следуют рекомендуемому шаблону именования глагола-существительного функций PowerShell, и 4. вторая функция фактически добавляет пользователей в группу, а не удаляет их. Принятый ответ от 6 лет назад является точным, полным и функциональным. Я не вижу причин, почему какой-либо дополнительный ответ был необходим.
запятой
Вы фанат! Это ты просто недалекий
Еще кое-что. У меня есть точный скрипт в моей организации с более чем 5000 пользователей, и он работает просто отлично. Вам просто нужно кормить функцию информацией. Также обратите внимание, что у нас есть триггеры, выполняемые на контроллере задач, где он запускает триггерное событие, запускаемое при создании или отключении нового пользователя. Пожалуйста, подумайте нестандартно ................
$ DomainController не определен. Ваша функция RemoveUserFromGroup использует командлет Add-ADGroupMember. Ваш «Remove» (если командлет Remove-ADGroupMember фактически был просто опечаткой) работает только в том случае, если пользователь не входит в группу. Вы также не упоминаете даже удаленно задачу получения пользователей из указанного подразделения. В лучшем случае это частичное решение, требующее работы - когда полное решение уже представлено и принято.
запятой
О, я понимаю, о чем ты говорил. LOL - Я просто скопировал верх и приклеил его к низу. С тех пор я исправил это ... $ DomainController был помещен туда на тот случай, если этот пользователь не запустит скрипт из DC. Опять же, пользователь и группа предоставлены. Вы можете запустить простой Get-ADUser -Filter *, если хотите, но это кажется обыденным ... Было бы лучше просто прочитать журналы событий DC и вытащить нового пользователя, а не циклически перебирать каждого пользователя. Но, эй, есть несколько способов