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:41] jpfsp-аккаунты [2026/03/25 15:06] (current) jp
Line 27: Line 27:
  
   Get-ADUser -Filter { objectSID -eq "S-1-5-21-3689081546-3309677343-2398646329-32103" } -Server "dc01.arasaka.old"   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 на аккаунты актуального домена ==== ==== Скрипт замены FSP на аккаунты актуального домена ====
  
-Представим типичную ситуацию: есть два домена, старый (legacy) и новый. Аккаунты старого домена были скопированы при помощи //ADMT// с сохранением //SID History// и таким же логином (//samAcoountName//).+Представим типичную ситуацию: есть два домена, старый (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-аккаунты.1774449681.txt.gz · Last modified: by jp