Exchange Server: Postfächer exportieren und importieren im PST-Format


    Tags: ,

    Mailbox aus Exchange in eine PST-Datei exportierenIn ver­schiedenen Szenarien ist es not­wendig, Post­fächer von einem Exchange Server in eine PST-Datei zu expor­tieren oder umge­kehrt eine solche zu impor­tieren. Bei­spiele dafür sind die Mig­ration von Post­fächern von anderen Sys­temen zu Exchange oder eine kurz­zeitige Sicherung eines Post­faches.

    Die Import- und Export­funktion bzw. die Berechtigung, sie zu nutzen, ist auf einem Exchange Server standardmäßig nicht freigegeben. Daher räumt man erst mit der Exchange-Power­Shell einem Benutzer das erforderliche Recht ein:

    New-ManagementRoleAssignment -Role "Mailbox Import Export" -User <BENUTZERAME>

    Benutzer die Berechtigung zum Im- und Export von Postfächern erteilen.

    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

    Postfach mit New-MailboxExportRequest in eine PST-Datei schreiben

    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.

    Fortschritt des Mailbox-Erports überwachen mit Get-MailboxExportRequest

    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, Completed­With­Warning, 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 Benutzer­namen 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öglich­keit, den Dateinamen anders zu gestalten, als wenn man nur $_.pst dort verwenden würde.

    Export-Aufträge entfernen

    Zum Schluss sollte natürlich auch auf­geräumt werden, da Exchange die Jobs, auch wenn diese mit Completed abgeschlossen wurden, nicht selbst löscht.

    Get-MailboxExportRequest | Remove-MailboxExportRequest

    Jobs für den Mailbox-Export nach Ausführung entfernen mit 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 Wurzel­verzeichnis ü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 Post­fach, in das die PST-Datei importiert wird, der Post­eingang 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 Posteingangs­ordner 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.

    3 Kommentare

    Bild von Benjamin
    Benjamin sagt:
    8. August 2019 - 8:21

    Vielen Dank für den tollen und ausführlichen Artikel! Gerade die Fehlersuche (Stichwort Bad-/Largeitems) und das Sprachproblem können sehr zeitintensiv sein.

    Bild von Andreas Fey
    Andreas Fey sagt:
    8. August 2019 - 8:38

    Geht der PST Export mittlerweile eigentlich auch bei Office 365 ?

    Bild von Roland
    Roland sagt:
    10. August 2019 - 20:30

    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