The cloud – also known as ‘somebody else’s computer’ – provides a lot of benefits that we’re all aware of these days. However, it IS somebody else’s computer, located somewhere else. Moving around large amounts of data from your physical location to somewhere else is a lot slower compared to moving files around on your gigabit LAN.  When it comes to PSTs – Microsoft Outlook’s standard data file format containing the local standalone copy of a mailbox, things can get tricky. Although PSTs shouldn’t be used generally these days, they’re great for exports and imports of data.  So we will take a look at how to import PSTs to Exchange Online.

The Process to Import PST files to Exchange Online is not like Exchange On-premises

Historically you had two easy options: Let a user open the PST themselves from their computer, or import the PST into a mailbox on your Exchange server. Importing on Exchange didn’t take too long (and some versions of Exchange dropped the ability to do so nicely for a while, but it returned), nor did opening a mailbox in Outlook and importing the contents of a PST into a mailbox that way – the data moved around as quick as your links and disk IO would allow.

A New Process

With Office 365 that changed , and importing PSTs into Exchange Online is a lot harder. There is no New-MailboxImportRequest PowerShell command to run – instead there’s a fairly comprehensive process to go through which at a high level:

Use a command line program called AZCopy to upload your PST (or PSTs) to Azure Storage is the first step, defined by using a SAS URL that kicking off the process via will give you. For me, uploading 100GB took around 4 hours, which is fairly fast by internet standards, but still slow when compared to gigabit network scenarios on-premises.

Once uploaded, the next step is to create a PST Import mapping file in CSV format, to tell Office 365 which mailbox each PST needs to go into with any other options required. This is the step that I expected to be reasonably quick, since the Azure Storage should be in the same datacenter as your Office 365 tenant is (and it says so in the documentation). However, I found that it took 5 days to complete, and even then only 6 of the 11 PSTs I uploaded to make the 100GB worked, the rest failed. After downloading the report, the only error code I could find was ‘MRSUnknownError’.

This really left the official PST import process as something to avoid – waiting that long for it to fail, and not being able to see it’s failed until the end is way too long to wait. It would be alright for a few gigabytes maximum, but not at this scale.

Due to this, I attempted a different method to import data into Exchange Online; which I could only do because I’m running an Exchange Hybrid setup.  I used the nice New-MailboxImportRequest command and have the data locally imported within a few hours, accessible by users even in Exchange Online once the import’s finished, then trigger a Exchange On-Prem to Exchange Online migration. That migration might take a while, but I don’t mind – the data is accessible for the entire process, and at the end will ‘switch’ over to Exchange Online, and prompt any user with the mailbox open to restart their Outlook client.

Wrapping up!

How oi import PSTs into Exchange Online wasn’t a use case I originally intended for keeping an Exchange server running on-premises – but I’m glad I did!