На практике достаточно часто возникают ситуации, когда нужно объявить членство пользователю №2 в тех же самых группах безопасности, что и у пользователя №1. Active Directory творить такие чудеса «из коробки», к сожалению, не умеет…
На помощь в таких случаях приходит только PowerShell:
[System.Console]::Title = "Перенос групп между пользователями"
$source = Read-Host "Имя пользователя-источника"
$destination = Read-Host "Имя целевого пользователя"
$groups = Get-ADPrincipalGroupMembership -Identity $source
$count = ($groups | measure).Count
Write-Host
Write-Host "-----------------------------------------------------------------------------" -ForegroundColor Green
Write-Host "Пользователь $source является членом $count групп безопасности:" -ForegroundColor Cyan
foreach ($group in $groups)
{
Write-Host "$group" -ForegroundColor Cyan
}
Write-Host "-----------------------------------------------------------------------------" -ForegroundColor Green
Write-Host
Write-Host "-----------------------------------------------------------------------------" -ForegroundColor Green
Write-Host "Начат процесс переноса групп безопасности от пользователя $source к пользователю $destination..." -ForegroundColor Cyan
foreach ($group in $groups)
{
Write-Host
$members = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SamAccountName
if ($members -contains $destination)
{
Write-Host "Пользователь уже состоит в группе $group..." -ForegroundColor Red
}
else
{
Write-Host "Добавление пользователя $destination в группу $group..." -ForegroundColor Cyan
Add-ADPrincipalGroupMembership -Identity $destination -MemberOf $group -ErrorAction Ignore | Out-Null
}
}
Write-Host "-----------------------------------------------------------------------------" -ForegroundColor Green
Write-Host
Write-Host "Процесс переноса выполнен!" -ForegroundColor Cyan
Read-Host
Сначала скрипт запрашивает логин доменного пользователя, у которого нужно взять список групп безопасности, далее запрашивает логин пользователя, которому нужно объявить членство в тех же самых группах.
После всего этого скрипт подсчитает количество групп эталонного пользователя, выведет список и начнёт добавление. Если в процессе работы встретится группа, в которой целевой пользователь уже состоит — скрипт просто «перешагнёт» через неё.
Для удобства работа скрипта ведётся в визуальном режиме.