При заведении нового пользователя в домене AD иногда нужно включить его в большое количество групп. Добавлять пользователя в группы через консоль ADUC довольно утомительно, поэтому иногда проще скопировать членство в группах одного пользователя и применить его к другому с помощью скрипта PowerShell. Это также удобно, когда из определенного отдела увольняется сотрудник и нужно назначить новому человеку те же самые группы доступа.
Допустим, вам нужно скопировать группы пользователя r.radojic и добавить в эти же группы нового пользователя a.novak.
С помощью командлета Get-ADUser получим список групп пользователя-источника:
$getusergroups = Get-ADUser -Identity r.radojic -Properties memberof | Select-Object -ExpandProperty memberof
Чтобы добавить нового пользователя в те же группы, достаточно отправить полученный список групп через пайп командлету Add-ADGroupMember:
$getusergroups | Add-ADGroupMember -Members a.novak -verbose
Теперь проверьте, что новый пользователь был успешно добавлен в те же группы, что и исходный.
Get-ADUser -Identity a.novak -Properties memberof | Select-Object -ExpandProperty memberof
Можно использовать универсальный командлет Get-ADPrincipalGroupMembership, который позволит скопировать членство в группах любого объекта AD: будь то пользователь, или компьютер.
$userSource= “r.radojic"
$userTarget=”a.novak”
$sourceGroups = Get-ADPrincipalGroupMembership -Identity $userSource
Add-ADPrincipalGroupMembership -Identity $userTarget -MemberOf $sourceGroups
Можно использовать PowerShell скрипт, который автоматически пишет текстовый лог файл с информацией о добавлении пользователя в группы:
$logfile="c:\ps\CopyAdGroup.log"
$userSource= “r.radojic"
$userTarget=”a.novak”
$Time = Get-Date
Add-content $logfile -value $Time -Encoding UTF8
Add-content $logfile -value "_______________"
Add-content $logfile -value "Копирование групп AD с пользователя $userSource на $userTarget" -Encoding UTF8
$sourceGroups = (Get-ADPrincipalGroupMembership -Identity $userSource).SamAccountName
foreach ($group in $sourceGroups)
{
Add-content $logfile -value "Добавление пользователя $userTarget в группу $group" -Encoding UTF8
try
{
$log=Add-ADPrincipalGroupMembership -Identity $userTarget -MemberOf $group
Add-content $logfile -value $log -Encoding UTF8
}
catch
{
Add-content $logfile $($Error[0].Exception.Message) -Encoding UTF8
Continue
}
}
Add-content $logfile -value "_______________"
Еще одна достаточно частая задача – скопировать всех пользователей из одной доменной группы в другую. Можно использовать такую команду:
Get-ADGroupMember "SPB-GPO-Admins" | ForEach-Object { Add-ADGroupMember "SPB-Server-Admins" -Members $_ }
Иногда можно использовать другие техники для автоматического добавления пользователя в группы AD в зависимости от его должности или других свойств, указанных в AD. В статье по ссылке рассмотрен пример создания динамических групп Active Directory.