Simple import of multiple PST files for a single user

Exchange Server 2013Exchange Server 2016Description

This script imports multiple PST files located in a single directory into a user mailbox or a user mailbox archive. 

Due to some filename limitations of the New-MailboxImportRequest cmdlet in reagards to the UNC path, the PST filenames are sanitized. Any unsupported (unwanted) character is removed. You can modify the replacement function as needed. This might be necessary as the PST filenames can be used as target folder names during import.

Original filenames:

Filenames before renaming

Renamed filenames:

Filenames after renaming

When using the FilenameAsTargetFolder switch each PST file is imported into a separate target folder.

PST filenames used as target folder

After successfully importing a PST file, the PST can be renamed to .imported. This simplifies a re-run of the script in the case that you have a lot of PST files for a user or a large number of files as part of the archive solution offboarding process.

NOTE:
This script utilizes the GlobalFunctions PowerShell module for logging. Please prepare your system for the use of the GlobalFunctions module first.

Steps performed:

  1. Sanitize PST filenames
  2. Create a new mailbox import request
  3. Monitor the status of created import request
    1. When still running, continue monitoring status
    2. When successfully finished, save the import request statistics report to the log file and continue with the next PST
    3. Rename the imported PST file to .imported
    4. When aborted, continue with the next PST or exit script

Examples

Example PowerShell Output

.\Start-MailboxImport.ps1 -Identity JohnDoe -Archive -FilePath "\\ROBERTKWEISS\e$\PSTImport\JohnDoe" -FilenameAsTargetFolder -BadItemLimit 10 -ContinueOnError -SecondsToWait 90

Note: Script will wait 90s between each status check!
Create New-MailboxImportRequest for user: JohnDoe and file: \\ROBERTKWEISS\e$\PSTImport\JohnDoe\Myoldarchive.pst into the archive. Targetfolder:"Myoldarchive".
Waiting for import JohnDoe-Myoldarchive.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive.pst to be completed. 
Status: InProgressWaiting for import JohnDoe-Myoldarchive.pst to be completed. 
Status: InProgressWaiting for import JohnDoe-Myoldarchive.pst to be completed. 
Status: InProgressImport request JohnDoe-Myoldarchive.pst completed successfully.
Import request JohnDoe-Myoldarchive.pst deleted.
Create New-MailboxImportRequest for user: JohnDoe and file: \\ROBERTKWEISS\e$\PSTImport\JohnDoe\Myoldarchive1.pst into the archive. Targetfolder:"Myoldarchive1".
Waiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: QueuedWaiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: InProgressWaiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: InProgressWaiting for import JohnDoe-Myoldarchive1.pst to be completed. 
Status: InProgressImport request JohnDoe-Myoldarchive1.pst completed successfully.
Import request JohnDoe-Myoldarchive1.pst deleted.
Script finished.

Version History

  • 1.0, Initial community release
  • 1.1, log will now be stored in a subfolder (name equals Identity)
  • 1.2, PST file renaming added
  • 1.3, Module ActiveDirectory removed
  • 1.4, AcceptLargeDatalost would now be added if BadItemLimit is over 51
  • 1.5, Parameter IncludeFodlers added
  • 1.6, Parameter TargetFolder added
  • 1.7, Parameter Recurse added
  • 1.8, PST file rename after successful import added

Links

Last updated: 2017-02-02

Follow me

Additional Note

This Powershell script has been optimized using the ISESteroids™ add-on. Learn more about ISESteroidshere.

Entdecke mehr von Granikos GmbH & Co. KG

Jetzt abonnieren, um weiterzulesen und auf das gesamte Archiv zuzugreifen.

Weiterlesen