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 -EmailAddresses @{Add=$_.NewEmail} }
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
Nice work Bobb. Two lines of your code seem to be identical though.
“Add additional SMTP address” and “Set Primary SMTP address and disable email address policy”.
Good spot Dazza!
I’ve fixed “Add additional SMTP address” with the correct command. Thanks for the help.