PowerShell: zmiana UserPrincipalName

UserPrincipalName to jeden z atrybutów Active Directory, stanowi login oparty na standardzie RFC 822 i składa się z dwóch elementów – prefiksu nazwy UPN (nazwy konta użytkownika) oraz sufiksu nazwy UPN (nazwy domeny). Jak zmienić UPN użytkownika? Jak zrobić to masowo z użyciem PowerShell? W jaki sposó zmienić

Większość usług katalogowych opiera się o nazewnictwo z lasem lub domeną i rozszerzeniemi .local / .lan / .internal np sprawdzoneit.local

UserPrincipalName w takim wypadku to nazwauzytkownika@sprawdzone.it jak zmienić ją na nazwauzytkownika@zaufane.it ?

Zacznijmy od dodania sufiksu do naszej domeny obecnej domeny, otwieramy przystawkę Active Directory Domains and Trusts

W lewym panelu klikamy prawym prczyiskiem na głównej gałęzi i wybieramy właściwości:

następie wprwadzamy nowy UPN suffix, w naszym przypadku zaufane.it i klikamy dodaj:

nowo dodany suffix pojawi się na liście:

Następnie w przystawce Użytkownicy dla określonego konta użytkownika możemy na zakładce konto wskazać nowy suffix:

Z poziomu PowerShell użyjemy polecneia: Set-ADUser

Set-ADUser -Identity administrator -UserPrincipalName "administrator@zaufane.it"

Aby zmienić UPN masowo, na przykładać dla wszystkich użytkowników którzy będą używać Microsfot 365, uyżyjemy do tego skryptu PowerShell.

Załóżmy że mamy użytkowników w określonym OU np m365 oraz dodatkowo posiadają oni atrybut EmailAddress w domenie sprawdzone.it

skrypt wybiera wszystkich użytkowników z Active Directory o określonym wyżej filtrowaniu a następnie zmienia masowo UserPrincipalName (przez podmiane suffixów użytych w parametrach). Na końcu wyświetli komunikat o zmianie Suffixu per użytkownik:

#Active Directory module
Import-Module ActiveDirectory

#parameters
$server = "dc"
$oldSuffix = "sprawdzone.it"
$newSuffix = "zaufane.it"


#take all users from OU whose EmmailAddress is *@sprawdzone.it
$ou = "OU=m365,DC=sprawdzone,DC=it"
Get-ADUser -Filter {EmailAddress -like "*@sprawdzone.it"} -SearchBase $ou | ForEach-Object {

        #build a new UPN by replacing the suffix
        $newUpn = $_.UserPrincipalName.Replace($oldSuffix, $newSuffix) 

        #change UPN
        $_ | Set-ADUser -server $server -UserPrincipalName $newUpn

        #write 
        Write-Host -ForegroundColor Green  "Changed UserPrincipalName user: $($_.SamAccountName) for: $newUPN"
    }

w efekcie uzyskamy w naszej konsoli poniższy wynik:

Oczywiście warunki filtrowania i OU są opcjonalnie. A przed zastosowaniem produkcyjnym testujcie komentując linie 18 czyli $_ | Set-ADUser…..