If you are synchronizing your on-premises Active Directory with Office 365 (in most cases you do) then you need to set the UPN for the on-premises user accounts with the correct UPN. The UPN from on-premises user accounts is synchronized to Office 365 to create the ID for signing in.
Most organizations are not using the UPN on user accounts for authentication on-premises. The option has been there since Windows 2000, but most organizations still use the domainname\username format for authentication. However, you need to verify if any user accounts are using the UPN for authentication before making this change. At minimum, you should communicate with your application and system administrators to see if they are aware of anything that might use UPNs. If your organization has issued certificates to users, they might be using UPN as the unique identifier for the certificate.
The script below does the following:
- Obtains a list of all users where the proxyAddresses attribute has a value. This is done so that the result include only user accounts with an Exchange attributes configured.
- Identifies the primary email address based on the all caps "SMTP:" text.
- Strips out the "SMTP:" text from the primary SMTP address.
- If the new UPN and the existing UPN do not match the user account is updated and the change is logged.
#Log folder must already exist
$logfile = "C:\Scripts\SyncUPN.txt"
#Adds timestamp to log file
Get-Date | Out-File -FilePath $logfile -Append
#Obtains only users with valid proxyAddresses attribute
$users = Get-ADUser -Properties proxyAddresses -Filter {proxyAddresses -like "*"}
#Prepare variables for processing status
$total = $users.count
$current = 0
Foreach ($u in $users) {
#Find primary SMTP address for user
$primarySMTP = $u.proxyAddresses | Where-Object {$_ -clike "SMTP:*"}
#Remove "SMTP:" to create the new UPN value
$newUPN = $primarySMTP.Substring(5)
#Set the new UPN value only if required
If ($u.UserPrincipalName -ne $newUPN) {
$u.DistinguishedName + " Old UPN: " + $u.UserPrincipalName | Out-File -FilePath $logfile -Append
$u.DistinguishedName + " New UPN: " + $newUPN | Out-File -FilePath $logfile -Append
Set-ADUser $u -UserPrincipalName $newUPN
} #end if
#Processing status
$current += 1
Write-Progress -Activity "Processing users to update UPN to primary email address" -Status "Progress: $current" -PercentComplete ($current/$total*100)
} #end foreach
No comments:
Post a Comment