PowerShell · 14.10.2022

Перенос групп пользователю

На практике достаточно часто возникают ситуации, когда нужно объявить членство пользователю №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

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

После всего этого скрипт подсчитает количество групп эталонного пользователя, выведет список и начнёт добавление. Если в процессе работы встретится группа, в которой целевой пользователь уже состоит — скрипт просто «перешагнёт» через неё.

Для удобства работа скрипта ведётся в визуальном режиме.