The Magician

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
fsp-аккаунты [2026/03/25 14:30] jpfsp-аккаунты [2026/03/25 15:06] (current) jp
Line 18: Line 18:
   Get-ADGroupMember -identity "some_group_with_FSP"   Get-ADGroupMember -identity "some_group_with_FSP"
   Get-ADGroupMember : Произошла неопределенная ошибка   Get-ADGroupMember : Произошла неопределенная ошибка
-Для вывода членов группы нам потребуется+Для вывода членов группы нам потребуется спайпить результат командлета //Get-ADGroup// для //Get-ADObect// следующим образом:
  
 <code> <code>
 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 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
 </code> </code>
 +
 +В выводе данной команды мы получим //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// из групп после замены. 
 +
 +<code>
 +$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"
 +    }
 +}
 +</code>
 +{{tag>ActiveDirectory ADMT PowerShell}}
fsp-аккаунты.1774449056.txt.gz · Last modified: by jp