===== FSP-аккаунты ===== Аккаунты типа //Foreign Security Principals// представляют собой ссылки на аккаунты, расположенные в другом домене. Такие аккаунты создаются в домене при попытке обращения к ним, и располагаются в следующем контейнере: CN=ForeignSecurityPrincipals,DC=arasaka,DC=local При этом, если мы добавим в какую-либо группу аккаунт из доверенного домена - в консоли //AD UC// мы не увидим доверенный домен. Аккаунт будет выглядеть так, словно он принадлежит текущему домену. Это происходит потому что отображается не аккаунт другого домена, а //Foreign Security Principal//, который создался в текущем домене. На таком аккаунте будет красная стрелка. Пример: ;#; {{::ad_fsp_example.jpg|}} ;#; ==== Работа с группами, содержащими в себе FSP ==== Вывести пользователей из группы, содержащей в себе FSP при помощи стандартного для таких ситуаций командлета //Get-AdGroupMember// - не получится. Get-ADGroupMember -identity "some_group_with_FSP" Get-ADGroupMember : Произошла неопределенная ошибка Для вывода членов группы нам потребуется спайпить результат командлета //Get-ADGroup// для //Get-ADObect// следующим образом: Get-ADGroup -Identity "some_group_with_FSP" -Properties Members -Server dc01.arasaka.local | Select-Object -ExpandProperty Members | Get-ADObject -Server dc01.arasaka.local | Where-Object ObjectClass -eq foreignSecurityPrincipal В выводе данной команды мы получим //DN// и //SID//, а не //Readable Names//. Чтобы преобразовать данный //SID// в понятное имя аккаунта - нам потребуется отрезолвить данный SID в имя на контроллере домена, к которому принадлежит аккаунт, пример: Get-ADUser -Filter { objectSID -eq "S-1-5-21-3689081546-3309677343-2398646329-32103" } -Server "dc01.arasaka.old" Если мы хотим удалить FSP-аккаунт из группы - лучше всего опираться на //DN//, а не //SID//, пример: Set-ADGroup -Identity $group -Remove @{member=$fsp.DistinguishedName} ==== Скрипт замены FSP на аккаунты актуального домена ==== Представим типичную ситуацию: есть два домена, старый (legacy) и новый. Аккаунты старого домена были скопированы при помощи //ADMT// с сохранением //SID History// и таким же логином (//samAccountName//). :!: Примечание: в этом случае аккаунты в новом домене в атрибуте //AD// //SID History// - будут содержать //SID// аккаунтов из старого домена. В группах нового домена, при этом, содержатся учётные записи //FSP//, через которые заданы права (к примеру, на общие ресурсы). В этом случае при декомиссии старого домена данные права пропадут (станут //orphaned//, их //Readable Names// будет невозможно получить). Если таких групп много - лучший вариант - это скрипт, который пройдется по группам и заменит //FSP//-аккаунты на учётные записи нового домена на основании соответствия по //samAccountName//, удалив //FSP// из групп после замены. $group = "some_group_with_FSP" $server = "dc01.arasaka.local" $members = Get-ADGroup -Identity $group -Properties Members -Server $server | Select-Object -ExpandProperty Members | Get-ADObject -Server $server | Where-Object ObjectClass -eq foreignSecurityPrincipal foreach ($fsp in $members) { $sid = $fsp.Name try { $nt = (New-Object System.Security.Principal.SecurityIdentifier($sid)). Translate([System.Security.Principal.NTAccount]).Value # DOMAIN\username $sam = $nt.Split('\')[1] Write-Host "Resolved $sid -> $nt" # ищем локального пользователя $localUser = Get-ADUser -Filter { SamAccountName -eq $sam } -Server $server -ErrorAction SilentlyContinue if ($localUser) { Write-Host "Found local user: $($localUser.SamAccountName)" # добавляем в группу Add-ADGroupMember -Identity $group -Members $localUser -Server $server # удаляем FSP Set-ADGroup -Identity $group -Remove @{member=$fsp.DistinguishedName} Write-Host "Replaced FSP with local account" } else { Write-Warning "Local user NOT FOUND for $sam" } } catch { Write-Warning "Failed to resolve SID: $sid" } } {{tag>ActiveDirectory ADMT PowerShell}}