How to Import PST Files into Mailboxes with Exchange 2010 SP1

In Exchange Server 2010 SP1 importing PST files into mailboxes is performed using Mailbox Import Requests. These are similar to export requests in that they are processed by a Client Access server.

Because multiple Client Access servers can exist in a site there is no way to determine which one will process the request, therefore the PST file to import must be accessible via the UNC path of shared folder.

The account that is performing the import also needs to be explicitly granted the rights to do so, as no accounts have this right by default (even Organization administrators).

Granting User Rights for Mailbox Imports in Exchange 2010 SP1

The first step is to grant the right to import mailboxes to an account in your organization.  In the Exchange Management Shell run the following command.

New-ManagementRoleAssignment –Role "Mailbox Import Export" –User Administrator

If you’re logged with that user already simply restart your Exchange Management Shell session to be granted access to the new cmdlets.

Creating a Network Share for Mailbox Imports in Exchange 2010 SP1

Next we need to create the network share that will be used as the file path for the PST files to be imported.  All that is required here is a network share that the Exchange Trusted Subsystem group has read/write permission to.

Importing a PST File with an Exchange Server SP1 Mailbox Import Request

To import a PST file to a mailbox we use the New-MailboxImportRequest cmdlet.  In this example the PST filealan.reid.pst is being imported into John Smith’s mailbox.

[PS] C:\>New-MailboxImportRequest -FilePath \\esp-ho-ex2010a\pst\alan.reid.pst -Mailbox john.smith

In some cases you might prefer to import the PST file into sub-folder of the mailbox. You can do this by adding the -TargetRootFolder parameter to the command.

[PS] C:\>New-MailboxImportRequest -FilePath \\esp-ho-ex2010a\pst\alan.reid.pst -Mailbox john.smith -TargetRootFolder "Mailbox - Alan Reid"

The import request will create the target folder and begin importing the PST file contents into it.

You can view the status of the mailbox import request using the Get-MailboxImportRequest cmdlet.

[PS] C:\>Get-MailboxImportRequest

Name                                           Mailbox                                        Status
----                                           -------                                        ------
MailboxImport                                  exchangeserverpro.net/Company/Users/Head Of... InProgress

By piping Get-MailboxImportRequest into Get-MailboxImportRequestStatistics you can also monitor the progress of the import.

[PS] C:\>Get-MailboxImportRequest | Get-MailboxImportRequestStatistics

Name                                   Status                    TargetAlias                           PercentComplete
----                                   ------                    -----------                           ---------------
MailboxImport                          InProgress                john.smith                            10

Importing PST Files into Personal Archives in Exchange Server 2010 SP1

Another way to use mailbox import requests is to import PST files directly into personal archive mailboxes. This is very useful for organizations who want to get rid of all PST files on the network.  All you need to do is add the -IsArchive parameter to the command when importing the PST file to a mailbox user who has been enabled for archiving.

[PS] C:\>New-MailboxImportRequest -FilePath \\esp-ho-ex2010a\pst\archive.pst -Mailbox alan.reid -IsArchive

Completing the Mailbox Import Request

When a mailbox import request is completed it remains on the server until it is removed by an administrator using Remove-MailboxImportRequest.

To see all of the completed mailbox import requests run this command.

[PS] C:\>Get-MailboxImportRequest | where {$_.status -eq "Completed"}

Name                                           Mailbox                                        Status
----                                           -------                                        ------
MailboxImport                                  exchangeserverpro.net/Company/Users/Head Of... Completed

And to clear all completed mailbox import requests from Exchange run the following command.

[PS] C:\>Get-MailboxImportRequest | where {$_.status -eq "Completed"} | Remove-MailboxImportRequest

Using Transport Rules to Restrict Users from Sending Email to External Recipients

The first step in this method is to create a distribution group. The members of this group will be the users who are restricted from sending external emails. It does not need to be a security group, but it does need to be universal in scope.

Next, create a new Transport Rule with the following configuration.

Conditions:

  • From a member of a distribution list (and choose the distribution group you created above)
  • Sent to users that are inside or outside of the organization, or partners (and choose “Outside”)

Actions:

  • Send rejection message to sender with enhanced status code (I set the status code to 5.7.1 and configure a message such as “You are not authorized to send email to recipients outside of this organization”)

Exceptions: (optional)

  • Except when a recipient’s address matches text patterns (and add any domain names or email addresses they should still be allowed to send to)

After the new rule has taken effect the members of that distribution group will not be able to send to external recipients, whether they use the To, CC, or BCC fields to do so, and will still be able to send to those domains or email addresses you configure as an exception to the rule (even if the message includes other recipients that will get blocked, the permitted ones will still receive the email).