Копирование членов группы AD в группу другого домена

Копирование членов группы AD в группу другого домена

AD GroupДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов по системному администрированию Pyatilistnik.org. В прошлый раз я вам показал решение ситуации, когда у нас был диск защищенный от записи и как снять защиту с с такой usb флешки. В сегодняшней статье я хочу вам показать готовые сценарии, которые решают задачу по копированию членов группы Active Directory из одного домена в группу безопасности другого домена, так сказать копирование списка в рамках леса. Думаю, что это частая практическая задача.

Постановка задачи

У меня есть лес Active Directory root.pyatilistnik.org. В рамках леса есть два домена root и child. Появилась задача из группы Root-Terminal-Users в домене Root скопировать всех ее участников в группу Child-Terminal-Users из домена Child. Я хочу вам показать ряд методов позволяющих это осуществить за пару минут. Вообще удобно иметь под рукой такие готовые решения.

add user in group ad

Методы копирования участников одной группы AD в другую

  • Самым основным и современным методом является использование PowerShell, думаю тут ни у кого не будет возражений
  • Использование утилит командной строки dsget group и dsmod group

Копирование участников группы Active Directory в рамках леса

Сначала я рассмотрю копирование из одного домена в дугой в рамках леса, а ниже потом приведу примеры решений если у вас один лес и один домен.

Для начала я хочу отдать дань памяти утилитам dsget group и dsmod group. Перед тем как производить копирование нам необходимо узнать distinguishedName у каждой группы, как это делается смотрите по ссылке слева, лично я люблю использовать ADSIEdit или ADUC.

Вот distinguishedName для Root-Terminal-Users

CN=Root-Terminal-Users,OU=Группы,OU=Оргструктура,DC=root,DC=pyatilistnik,DC=org

Определение distinguishedName для копирования списка пользователей группы в другую группу Active Directory

Вот distinguishedName для Child-Terminal-Users

CN=Child-Terminal-Users,OU=Группы,OU=Оргструктура,DC=child,DC=root,DC=pyatilistnik,DC=org

Определение distinguishedName для копирования списка пользователей группы в другую группу Active Directory

Вот как выглядят сейчас данные группы безопасности.

Просмотр списка пользователейв группах Active Directory перед копированием

Далее открываем cmd в режиме администратора (Как открыть командную строку в данном режиме, я уже писал). Пишем команду, подставив естественно свои данные, первой идет группа откуда будет копироваться список пользователей у меня это Root-Terminal-Users, вторым идет группа назначения, у меня это Child-Terminal-Users

dsget group "CN=Root-Terminal-Users,OU=Группы,OU=Оргструктура,DC=root,DC=pyatilistnik,DC=org" -members | dsmod group "CN=Child-Terminal-Users,OU=Группы,OU=Оргструктура, DC=child,DC=root,DC=pyatilistnik,DC=org" -addmbr

У вас может выскочить ошибка:

Глобальная группа не может иметь встроенных или междоменных членов

Связано это с тем, что группа назначения Child-Terminal-Users имеет область действия (Глобальная), ее нужно изменить на локальную или универсальную.

Глобальная группа не может иметь встроенных или междоменных членов

Пробуем еще раз выполнить и все успешно отрабатывает.

Копирование участников группы Active Directory в рамках леса

По результату видим, что в группе Child-Terminal-Users появились нужные пользователи.

Успешно скопированный список пользователей из другой группы Actvie Directory

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

Import-Module ActiveDirectory

$group_source = Get-ADGroup "Root-Terminal-Users" -Server "dc01.root.pyatilistnik.org"
$group_destination = Get-ADGroup "Child-Terminal-Users" -Server "dc03.child.root.pyatilistnik.org"

foreach ($user in (Get-ADGroupMember $group_source))
{
Add-ADGroupMember $group_destination -Members $user}

Копирование участников группы Active Directory в рамках леса

Не забываем в скрипте указать свои данные.

Копирование участников группы Active Directory в рамках одного домена

Ну и теперь список попсовых вариантов для одного домена. В качестве теста группой источника будет Root-Terminal-Users, а группой назначения IT-Terminal-Users. Запустите PowerShell и введите:

Add-ADGroupMember -Identity 'IT-Terminal-Users' -Members (Get-ADGroupMember -Identity 'Root-Terminal-Users' -Recursive)

Обратите внимание, что сначала идет группа откуда идет копирование списка членов группы, а потом уже группа куда идет копирование. Все успешно отработало.

Копирование участников группы Active Directory в рамках одного домена

Еще один вариант в PowerShell введите:

Get-ADGroupMember Root-Terminal-Users | % {Add-ADGroupMember IT-Terminal-Users $_}

Тут первой указывается источник (Root-Terminal-Users), потом куда копируем (IT-Terminal-Users).

Вот еще вариант:

Get-ADGroupMember "Root-Terminal-Users" | Get-ADUser | Foreach-Object {Add-ADGroupMember -Identity "IT-Terminal-Users" -Members $_}

И еще конструкция:

$gsource = "Root-Terminal-Users"
$gtarget = "IT-Terminal-Users"
Get-ADGroupMember -Identity $gsource |
foreach {
Add-ADGroupMember -Identity $gtarget -Members $($_.DistinguishedName)
}

Копирование участников группы Active Directory в рамках одного домена

Если кто-то любит LDAP, то вы так же можете его указать, и произвести копирование членов группы в другую группу с его помощью. Конструкция примет вид:

$Source_Group = "CN=Root-Terminal-Users,OU=Группы,OU=Оргструктура,DC=root,DC=pyatilistnik,DC=org"
$Destination_Group = "CN=IT-Terminal-Users,OU=Группы,OU=Оргструктура,DC=root,DC=pyatilistnik,DC=org"

$Target = Get-ADGroupMember -Identity $Source_Group
foreach ($Person in $Target) {
Add-ADGroupMember -Identity $Destination_Group -Members $Person.distinguishedname
}

Этот простой сценарий позволяет копировать пользователей, принадлежащих к исходной группе, в целевую группу.

$Sourse = [ADSI]"LDAP://CN=Root-Terminal-Users,OU=Группы,OU=Оргструктура,DC=root,DC=pyatilistnik,DC=org"
$Distination = [ADSI]"LDAP://CN=IT-Terminal-Users,OU=Группы,OU=Оргструктура,DC=root,DC=pyatilistnik,DC=org"

ForEach ($GroupDN In $Sourse.member)
{
$Object = [ADSI]"LDAP://$GroupDN"
# Check if object is already a member of this group.
If ($Object.IsMember($Distination.ADsPath) -eq $False)
{
$Object.Add($Distination.ADsPath)
"Object added to group $GroupDN"
}
Else
{
"Object already member of group $GroupDN"
}
}

Совсем сложный метод копирования участников группы в другую группу

Данный метод подразумевает, что вы делаете выгрузку пользователей по SamAccountName

Get-ADGroupMember -Identity Root-Terminal-Users -Recursive | select SamAccountName

Как скопировать пользователей одной группы AD в другую

Далее открываете свойства группы назначения и добавляете список.

Добавление пользователей в группу

Копирование членов группы AD в группу другого домена

На этом у меня все. Я попытался вам собрать все возможные варианты по копированию списка пользователей из одной группы Active Directory в другую. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Добавить комментарий

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