Tags: Exchange, Migration
In verschiedenen Szenarien ist es notwendig, Postfächer von einem Exchange Server in eine PST-Datei zu exportieren oder umgekehrt eine solche zu importieren. Beispiele dafür sind die Migration von Postfächern von anderen Systemen zu Exchange oder eine kurzzeitige Sicherung eines Postfaches.
Die Import- und Exportfunktion bzw. die Berechtigung, sie zu nutzen, ist auf einem Exchange Server standardmäßig nicht freigegeben. Daher räumt man erst mit der Exchange-PowerShell einem Benutzer das erforderliche Recht ein:
New-ManagementRoleAssignment -Role "Mailbox Import Export" -User <BENUTZERAME>
Anschließend muss man die PowerShell-Konsole schließen und erneut öffnen, weil ansonsten das Cmdlet New-MailboxExportRequest nicht vorhanden ist.
Ein Export eines oder mehrerer Postfächer wird nun ebenfalls über PowerShell abgewickelt:
New-MailboxExportRequest -Mailbox <username> -FilePath \\servername\verzeichnis\username.pst
Bei Bedarf kann man den Export auf bestimmte Elemente beschränken, indem man das Cmdlet mit dem Parameter IncludeFolders aufruft:
New-MailboxExportRequest -Mailbox <username> -IncludeFolders Aufgaben `
-FilePath \\servername\verzeichnis\username.pst
Umgekehrt könnte man bestimmte Ordner mit Hilfe von ExcludeFolders ausschließen. Noch feiner filtern lassen sich die Daten für den Export mit Hilfe des Parameters ContentFilter, wo man Mails sogar anhand der darin enthaltenen Begriffe auswählen kann:
New-MailboxExportRequest -Mailbox <username> -ContentFilter {body -like "*Rechnung*"} `
-FilePath \\servername\verzeichnis\username.pst
Dieser Aufruf würde nur Mails exportieren, die im Nachrichtentext das Wort "Rechnung" enthalten.
Status des Exports überwachen
Mit Get-MailboxExportRequest kann nun der Status des Exports verfolgt werden. Da das Postfach in unserem Fall nicht groß ist, steht der Status bereits nach kurzer Zeit auf completed.
Man kann das Cmdlet auch mit dem Parameter Status aufrufen, um nur die Jobs anzuzeigen, die einen bestimmten Status ausweisen:
Get-MailboxExportRequest -Status Completed
Zulässige Werte sind hier Queued, InProgress, Completed, CompletedWithWarning, Suspended und Failed.
Bulk-Export von Postfächern
Möchte man eine größere Zahl von Postfächern oder gleich alle exportieren, dann ist das oben beschriebene Verfahren mit der Angabe einzelner Benutzernamen zu umständlich. Um jede Mailbox in eine PST-Datei zu schreiben, übergibt man die gesamte Liste dem Export-Cmdlet:
$allmailboxes = Get-Mailbox
$allmailboxes |% {$_| New-MailboxExportRequest - FilePath "\\localhost\c$\$($_.Alias).pst"}
Das $($_.Alias) lässt einem hier die Möglichkeit, den Dateinamen anders zu gestalten, als wenn man nur $_.pst dort verwenden würde.
Export-Aufträge entfernen
Zum Schluss sollte natürlich auch aufgeräumt werden, da Exchange die Jobs, auch wenn diese mit Completed abgeschlossen wurden, nicht selbst löscht.
Get-MailboxExportRequest | Remove-MailboxExportRequest
Auch hier kann nach dem Status selektiert werden:
Get-MailboxImportRequest | where {$_.status -eq "Completed"} | Remove-MailboxImportRequest
PST-Dateien in Mailbox importieren
Andersherum funktioniert der Import nach dem genau gleichen Muster, es muss in den Namen der Cmdlet nur das Wort "Export" gegen "Import" getauscht werden:
New-MailboxImportRequest -Mailbox <username> -FilePath \\servername\verzeichnis\username.pst
Zusätzlich kann man hier mit TargetRootFolder festlegen, dass die Daten in einen bestimmten Ordner eingelesen werden, wenn man nicht möchte, dass sie in das Wurzelverzeichnis übernommen werden.
Das Cmdlet unterstützt auch das Filtern mit IncludeFolders und ExcludeFolders, aber ContentFilter wird nicht unterstützt.
Fehlersuche
Wenn ein Importvorgang auf dem Status Failed steht, kann man der Ursache mit folgendem PowerShell-Befehl auf den Grund gehen:
Get-MailboxImportRequest |
Get-MailboxImportRequestStatistics -IncludeReport |
fl $env:TEMP\import.txt
Meistens besteht das Problem darin, dass beim Import einige Items nicht gelesen werden konnten, da diese fehlerhaft waren.
Sprachkonflikte vermeiden
Als kleiner Tipp sei noch dazu gesagt, dass unbedingt auf die Sprache des Postfachs geachtet werden sollte. Wenn im neuen Postfach, in das die PST-Datei importiert wird, der Posteingang die englische Bezeichnung Inbox trägt, aber in der PST-Datei ein Posteingang vorhanden ist, so landen die E-Mails, aus dem Posteingang in einem eigenen Posteingangsordner und nicht in der Inbox.
Auch wird es dann später schwierig, wenn mit
outlook.exe /resetfoldernames
die Ordner in Outlook zum Beispiel von Englisch (Inbox) auf Posteingang (Deutsch) zurückgeändert werden sollen. Hier muss dann der Ordner Posteingang erst einmal umbenannt werden (etwa in Posteingang_old), und dann kann der Reset der Ordner durchgeführt werden.
Ein weiteres Ärgernis wäre es dann für den User, wenn er nun per Hand seine E-Mails vom Posteingang in die Inbox verschieben muss.
Täglich Know-how für IT-Pros mit unserem Newsletter
Roland Eich ist gelernter Fachinformatiker für Systemintegration und in der IT seit über 14 Jahren zu Hause. Roland deckt aufgrund seiner Erfahrungen ein breites Spektrum der Microsoft-Produktpalette ab.Zudem besitzt er verschiedene Zertifizierungen (MCITP, MCSA und MCSE, ITIL, PRINCE2).
// Kontakt: E-Mail //
Verwandte Beiträge
Weitere Links
3 Kommentare
Vielen Dank für den tollen und ausführlichen Artikel! Gerade die Fehlersuche (Stichwort Bad-/Largeitems) und das Sprachproblem können sehr zeitintensiv sein.
Geht der PST Export mittlerweile eigentlich auch bei Office 365 ?
Hallo Andreas,
leider geht der Export per PST in O365 nicht sondern nur der Import. Es gibt dazu aber einen Workaround, wenn man das unbedingt aus O365 in eine PST Datei haben will über eDiscovery. Evtl. bringen wir hier dazu nochmal einen Artikel.
Die andere Alternative wäre wohl ein Hybridszenario oder das Backup über Veeam.
Grüße
Roland