Hybid Exchange – Bulk Email Domain Name Change

All Powershell Commands

RED text indicates the bits you change for your environment.

 

CSV File example

CSV has a header row as shown and each user on a new line. Save as, for example, C:\tmp\yymmdd.csv

DisplayName,SamAccountName,PrimarySmtpAddress,NewEmail
John Smith,John.Smith,John.Smith@OLDdomain.com,John.Smith@NEWdomain.com

 

Import CSV
$users = Import-csv C:\tmp\yymmdd.csv

 

List AD user OU Location
$users | ForEach-object { Get-ADUser -filter "Name -like '*$($_. Displayname)'"  -Properties CanonicalName | select Name, SamAccountName, CanonicalName, DistinguishedName } | Export-Csv c:\tmp\usersOUs.csv

 

 Connect to MSOL
Connect-msolservice

 

Get Tennant GUID
$tenid = (Get-MsolPartnerContract -domain bobbitco.onmicrosoft.com).tenantid.guid

 

Check accounts’ last dirsync time
$users | foreach-object {get-msoluser -TenantId $tenid -UserPrincipalName "$($_.primarysmtpaddress)" | select userprincipalname, lastdirsynctime } | out-file c:\tmp\lastsync.txt

 

Check Remote Mailboxes exist
$users | ForEach-object { $exist = [bool](Get-remotemailbox $_.primarysmtpaddress -erroraction SilentlyContinue); Write-host "$Exist, $($_. Displayname)" }

 

Add additional SMTP address
$users | ForEach-Object { Set-RemoteMailbox $_.SamAccountName -PrimarySMTPAddress $_.NewEmail -EmailAddressPolicyEnabled $false }

 

Set Primary SMTP address and disable email address policy
$users | ForEach-Object { Set-RemoteMailbox $_.SamAccountName -PrimarySMTPAddress $_.NewEmail -EmailAddressPolicyEnabled $false }

 

Set AD UPN
$users | ForEach-Object { set-RemoteMailbox $_.SamAccountName -userprincipalname $_.NewEmail }

 

MSOL UPN update 1
$users | ForEach-Object { Set-MsolUserPrincipalName -TenantId $tenid -UserPrincipalName $_.PrimarySmtpAddress -NewUserPrincipalName ($_.SamAccountName+’@bobbitco.onmicrosoft.com’) }

 

MSOL UPN update 2
$users | ForEach-Object {  Set-MsolUserPrincipalName -TenantId $tenid –UserPrincipalName ($_.SamAccountName+’@bobbitco.onmicrosoft.com’) -NewUserPrincipalName $_.NewEmail }

 

Output MSOL UPNs
$users | ForEach-Object {get-msoluser -TenantId $tenid -UserPrincipalName $_.NewEmail | select userprincipalname} | out-file c:\tmp\OutputMSOLs.txt

 

Check Last Synctime
$users | ForEach-Object {Get-MSOLuser -TenantId $tenid -UserPrincipalName $_.newemail | select UserPrincipalName, LastDirsyncTime} | out-file c:\tmp\synctime.txt

 

Leave a Reply