Thursday, July 2, 2015

Synchronize an Exchange Online Mailbox with a different Active Directory Forest.


I recently worked on a project whereby I was migrating a Global Company that owned a number of business and they wanted to break down the barriers between the different brands and all collaborate under a new brand in Office365.

I synchronized a number of forests from around the world into the organization's Office365 tenant using the new Azure Active Directory synchronization tool. 

One of the businesses shared their Exchange Server (Business A)  with another business (Business B) and to migrate their mailboxes I implemented an Exchange Hybrid and migrated the mailboxes into Exchange Online. 

Business A Active Directory was authoritative for Business B mailboxes. So how do we disjoin them from Business A and synchronize them with Business B , so that Business B can perform identity management on their own Active Directory Forest.

So the following steps explain how to do this. This can of course be scripted if there were hundreds or thousands of users.


  1. Run this command on Business B Active Directory Forest to obtain all user's immutable ID
    ldifde -f con -r userprincipalname=sean@contoso.com -l objectguid
  2. Then on in the AAD tool stop synchronizing the users' from Business B
  3. This will then delete the users accounts, got to the Office365 recycle bin and restore the user's account. This will also convert the user's account to a cloud identity.
  4. The run this command in  the 'Windows Azure Active Directory Module for Windows PowerShell' to convert the cloud user's immutable id so that it matches the object guids obtained in step 1

    set-MsolUser -UserPrincipalName sean@contoso.com -ImmutableID I3/MGNcBbUWWVs+jXPTH4g==
  5. Finally their are some attributes that we need to match from Business A Active Directory Forest with each user's account in Business B Active Directory

    msExchAddressBookFlags
    msExchMailboxGuid
    msExchMasterAccountSid
    msExchRemoteRecipientType
  6. No we are ready to sync the OU with the AAD tool from Business B and Business B Active Directory will be the authoritative Active Forest for these mailboxes. 

Tuesday, March 31, 2015

Dell Migrator for Notes to Exchange - Admin Pool



As of from yesterday 30.01.15 , The admin pool feature stopped working.

To resolve this issue , assign a license to all the admin pool accounts.

Also I noticed that I could configure /adjust the Office 365 PowerShell Throttling in the MFNE console. So to Resolve this perform the following steps.


1.) Open the MNE Migration Manager.
2.) Click the Menu button in the upper right and select Global Default Settings.
3.) In the text file that opens, save the copy of current Global Default Setting, and locate the [PowerShell] heading.
4.) Remove the [PowerShell] heading and all values directly beneath it.
5.) Save and Close the file.
6.) Exit the MNE Migration Manager.
7.) Open the MNE Migration Manager and try configuring the Office 365 PowerShell Throttling settings again. You can also refer to the following KB article:


Sunday, December 28, 2014

Script to add legacyexchangedn as x500 alias into AD user object for Exchange Online

If a scenario existed whereby there was a non exchange hybrid like lotus notes or group wise messaging platform and some users were using Office365 and co-existence was achieved by uploading all of the onpremise users' as external contacts. Office365 users recipients have messages forwarded to from the source messaging platform. 

As you begin to convert the onpremise users' to federated or managed users. You need to capture that user's legacyexchangedn and ingest it into the users' AD users' proxyaddresses attribute as an x500 alias to prevent potential NDRs from existing Office365 users.

So run this Exchange Online command

get-mailcontact - resultsize unlimited | select-object legacyexchangedn,primarysmtpaddress | export-csv "csv file path" delete the first line 1 from the output of the csv

Then download this SCRIPT and edit the following lines


  • edit line 11 and enter your domain name
  • edit line 25 and enter your domain name
Then hold down shift and right click on the csv and select copy as path and paste the path into the window as per the image below and press the green play button.

This script will then search the root of the domain based on the domain name and mailnickname and add an x500 alias into the users' proxyaddresses attribute which will then be synced to Office365 via dirsync

So before the OU containing the AD user objects that needs to be synced you will need to run this command as there will be conflicts in dirsync.

import-csv "C:\Users\admin\Desktop\contacts to be deleted\contacts.csv" | Foreach-Object{Get-Mailcontact $_.primarysmtpaddress | remove-mailcontact -Confirm:$false}

Credit : Eduardo Martin


Quest Powershell Script to change UPN for Office365


I normally use AD Modify to modify users' UPNs. But it is only really practical when you are changing the UPN's per OU. 

Lets say you were migrating from a different messaging platform , like Lotus Notes or GroupWise. But AD had the mailnickname attribute populated and the correct UPN added into your AD. To run the script you need to do the following


  • Create a csv mail.csv and place it in the root C:\mail.csv. The heading of the csv will be 'mail' and then all the mailnicknames like sean@contoso.com
  • On line 29 add in the distinguished name of the domain/forest scope
  • Create a folder C:\logs to analyse any errors
  • Watch out for ' which are acceptable characters in a smtp email address but unacceptable as a UPN in Office365.
  • The script can be downloaded HERE.
The author of the script is a colleague of mine Adam Smith

Sunday, November 23, 2014

Outlook Security Warning when clicking on Lotus Notes Doc Links

After performing a migration from Lotus Notes to Exchange Online , Some users may see the following security pop ups when trying to click on doc links.




To resolve this issue the following items need to be added to a client machine’s registry.

1. Click Start, click Run, type regedit, and then click OK.
2. Locate the following registry subkey:
HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\xx.0\Common\Security\Trusted Protocols\All Applications
Note In this subkey, replace "xx.0" with 15.0 for Outlook 2013
3. Click the All Applications subkey.
4. On the Edit menu, point to New, and then click Key.
5. Type the name of the protocol that you want to exclude. For example, to disable the display of a security warning for the "Notes:" protocol, type Notes:.

Note Make sure that you include the colon (:) character.

Then use Group Policy Preferences to push it out to machines.



Folder Filtering and mapping with Dell MFNE 4.1



When using templates in Dell MFNE 4.1 , The template does not read the global settings defined in the tool.


So when you click modify template the next screen appears as per image below which allows you to edit the settings for the template specifically folder filtering and folder mapping.



If folder filtering is not configured properly, end users will see system folders in their Exchange inbox which would result in a horrible end user experience as per the image below.

So for folder filters add the following filters into your configuration file.


[Filters]
filter0=($Alarms)
filter1=(Group Calendars)
filter2=(Rules)
filter3=($Design)
filter4=Alarms
filter5=(CalSummary)
filter6=(~MAPISP(Internal))
filter7=(IPMCOMMONVIEWS)
filter8=(IPMVIEWS)
filter9=(Search Root)
filter10=($MAPIInbox)
filter11=($MAPIInfo)
filter12=($MAPIIPM Subtree)
filter13=($MAPIOutbox)
filter14=($MAPISent)
filter15=($MAPITrash)
filter16=(Discussion Threads)
filter17=($ToDo)
filter18=($FolderInfo)
filter19=($POP3)
filter20=(To do's\By Category)
filter21=(To do's\By Status)
filter22=(Mail Threads)
filter23=($FolderAllInfo)
filter24=($Inbox-Categorized1)
filter25=(MAPIUseContacts)
filter26=(APIUseContacts)
filter27=($MAPIUseContacts)
filter28=$MAPIUseContacts
filter29=JUNKMAIL
filter30=(JUNKMAIL)
filter31=($JUNKMAIL)
filter32=$JUNKMAIL
filter33=EML
filter34=(EML)
filter35=($EML)
filter36=$EML
filter37=(Manage Folders)
filter38=Manage Folders
filter39=$Manage Folders
filter40=($Manage Folders)
filter37=(Custom Expiration\By Date)
filter38=Custom Expiration\By Date
filter39=$Custom Expiration\By Date
filter40=($Custom Expiration\By Date)
filter41=FolderHiddenPublic
filter42=(FolderHiddenPublic)
filter43=(namecolumn)
filter44=(attachment icon)
filter45=$(FolderHiddenPublic)
filter46=($FolderHiddenPublic)
Filter47=(~CustomExpiration)
Filter48=(&CustomExpiration)
Filter49=(CustomExpiration)
Filter50=CustomExpiration
Filter51=$CustomExpiration
Filter52=($CustomExpiration)
Filter53=(~EML)
Filter54=(&EML)
Filter55=(EML)
Filter56=EML
Filter57=$EML
Filter58=($EML)
Filter59=(~FolderHiddenPublic)
Filter60=(&FolderHiddenPublic)
Filter61=(FolderHiddenPublic)
Filter62=FolderHiddenPublic
Filter63=$FolderHiddenPublic
Filter64=($FolderHiddenPublic)
Filter65=(~MAPIUseContacts)
Filter66=(&MAPIUseContacts)
Filter67=(MAPIUseContacts)
Filter68=MAPIUseContacts
Filter69=$MAPIUseContacts
Filter70=($MAPIUseContacts)
Filter71=(~NameColumn)
Filter72=(&NameColumn)
Filter73=(NameColumn)
Filter74=NameColumn
Filter75=$NameColumn
Filter76=($NameColumn)
Filter77=(~Stationery)
Filter78=(&Stationery)
Filter79=(Stationery)
Filter80=Stationery
Filter81=$Stationery
Filter82=($Stationery)
Filter83=(~Drafts)
Filter84=(&Drafts)
Filter85=(Drafts)
Filter86=Drafts
Filter87=$Drafts
Filter88=($Drafts)
Filter89=(~Manage Folders)
Filter90=(&Manage Folders)
Filter91=(Manage Folders)
Filter92=(Manage Folders)
Filter93=$(Manage Folders)
Filter94=($Manage Folders)
Filter95=(~Sent)
Filter96=(&Sent)
Filter97=(Sent)
Filter98=Sent
Filter99=$(Sent)
Filter100=(~SametimeInfo)
Filter101=(&SametimeInfo)
Filter102=(SametimeInfo)
Filter103=SametimeInfo
Filter104=$SametimeInfo
Filter105=($SametimeInfo)
Filter106=(~Attachment Icon)
Filter107=(&Attachment Icon)
Filter108=(Attachment Icon)
Filter109=Attachment Icon
Filter110=$Attachment Icon
Filter111=($Attachment Icon)
Filter106=(~Custom Expiration\Manage Folders)
Filter107=(&Custom Expiration\Manage Folders)
Filter108=(Custom Expiration\Manage Folders)
Filter109=Custom Expiration\Manage Folders
Filter110=$Custom Expiration\Manage Folders
Filter111=($Custom Expiration\Manage Folders)
Filter112=(~By Date)
Filter113=(&By Date)
Filter114=(By Date)
Filter115=By Date
Filter116=$By Date
Filter117=($By Date)
Filter118=((~Custom Expiration\Manage Folders))
Filter119=((&Custom Expiration\Manage Folders))
Filter120=((Custom Expiration\Manage Folders))
Filter121=(Custom Expiration\Manage Folders)
Filter122=($Custom Expiration\Manage Folders)
Filter123=(($Custom Expiration\Manage Folders))
Filter124=((~Custom Expiration\By Date))
Filter125=((&Custom Expiration\By Date))
Filter126=((Custom Expiration\By Date))
Filter127=(Custom Expiration\By Date)
Filter128=($Custom Expiration\By Date)
Filter129=(($Custom Expiration\By Date))
Filter130=(~Company Column)
Filter131=(&Company Column)
Filter132=(Company Column)
Filter133=Company Column
Filter134=$Company Column
Filter135=($Company Column)
Filter136=(~E-mail Column)
Filter137=(&E-mail Column)
Filter138=(E-mail Column)
Filter139=E-mail Column
Filter140=$E-mail Column
Filter141=($E-mail Column)


#Folder mapping

[EN]
~INBOX=Inbox
~SENT=Sent Items
~CALENDAR=Calendar
~CONTACTS=Contacts
~TASKS=Tasks
~TRASH=Deleted Items
~DRAFTS=Drafts
~OUTBOX=Outbox
~JOURNAL=Journal
JUNKMAIL=Junk E-mail
JUNKMAIL_2013=Junk Email
~PrivateIcon=Inbox
PrivateIcon=Inbox
~IMTranscripts=Conversation History
IMTranscripts=Conversation History

This will also map sametime chat history to conversation history 


Thursday, October 30, 2014

Bulk Uploading Mailboxes to Exchange Online and assigning licenses


Microsoft have made it really easy to perform bulk migrate migrations and assign licenses in Exchange Online.

You can export a csv and use it twice. The first csv will have the following headings

emailaddress
sean.ofarrell@contoso.com
ciaran.ofarrell@contoso.com
dean.jones@contoso.com
tecnicalfellow@contoso.com 

You can then upload the file then via the following option in Exchange Online 


And then to assign the licenses use the same csv but change the top heading to userprincipalname like below

userprincipalname
sean.ofarrell@contoso.com
ciaran.ofarrell@contoso.com
dean.jones@contoso.com
tecnicalfellow@contoso.com 

Connect to Office365 via the Windows Azure Active Directory Module for Windows PowerShell and do the following.


# First of all paste in the following variables

$AccountSkuId = "contoso:EXCHANGESTANDARD"
$UsageLocation = "IE"

# The paste the command in below with the correct CSV file path

$Users = Import-Csv "C:\Users\ergo\Desktop\Scripts\Import_users.csv"
$Users | ForEach-Object {
Set-MsolUser -UserPrincipalName $_.UserPrincipalName -UsageLocation $UsageLocation
Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -AddLicenses $AccountSkuId
}

And if you wanted to assign Exchange Online P2 Licenses then run the following commands,

# First of all paste in the following variables

$AccountSkuId = "contoso:EXCHANGEENTERPRISE"
$UsageLocation = "IE"

# The paste the command in below with the correct CSV file path

$Users = Import-Csv "C:\Users\ergo\Desktop\Scripts\Import_users.csv"
$Users | ForEach-Object {
Set-MsolUser -UserPrincipalName $_.UserPrincipalName -UsageLocation $UsageLocation
Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -AddLicenses $AccountSkuId
}

If you are using waad and want to assign a user with a P2 license an archive then you need to populate the AD attribute for the user “msExchRemoteRecipientType' and change the value to 3. This can be done in bulk via ADMODIFY or Powershell