[Update]: Dieser Beitrag wurde am 05. August 2021 aktualisiert.
Eine funktionierende E-Mail-Organisation geht zwangsweise mit effizientem Postfach-Backup einher. Dennoch bieten alle bisherigen Versionen von Microsoft Exchange, Exchange 2013 miteingeschlossen, nur eingeschränkte Möglichkeiten für eine Brick-level-Sicherung. Im Grunde kann granulares Backup nur mittels PST-Export bewerkstelligt werden. Diesen erledigt man entweder via Outlook oder PowerShell oder u.U. auch via Exchange Management Console / Control Panel. Im weiteren Teil des Beitrags widmen wir uns dem Weg über die PowerShell, und zwar am Beispiel von Exchange 2019, Exchange 2016, Exchange 2013 und Exchange 2010.
Sie können sich auch ein Video über das Exportieren der Postfachdaten in PST mit PowerShell ansehen.
Hinweis: Um Exchange 2007-Postfächer in PST-Dateien zu exportieren, verwenden Sie das Cmdlet Export-Mailbox. Wenn Sie Exchange Online verwenden, erfordert das Exportieren von Postfächern in PST einen anderen Ansatz, der in diesem Artikel erklärt wird.
Warum Postfächer in PST exportieren
Bevor wir uns mit der Skripterstellung beschäftigen, ein paar Worte zu PST-Export und PST-Dateien im Allgemeinen.
PST-Dateien (Personal Storage Table) waren die Hauptmittel zum Postfach-Backup seit den ersten Outlook-Versionen. Die neuste Outlook-Versionen nutzen vor allem OST-Dateien (Offline Storage Table), aber PST-Dateien sind weiterhin da. Es ist so, weil sie keine Drittanbieter-Tools benötigen, sind einfach zu bedienen und werden von fast jeder Outlook-Version unterstützt. Darüber hinaus können sowohl Administratoren als auch Benutzer Postfächer in diesen Format exportieren.
Die drei Hauptzwecke von PST-Dateien sind:
- Backup der Postfachdaten
- Archivierung
- Migration (z. B. von Exchange 2010 zu Exchange Online)
Export eines Postfachs in PST-Datei
Um den Inhalt eines Exchange-Postfachs in eine PST-Datei zu exportieren, greift man man auf das CmdLet MailboxExportRequest zurück. Es setzt sich zusammen aus zwei Pflichtparametern: -FilePath – definiert den Pfad der PST-Datei, in die exportiert werden soll, und -Mailbox – definiert den Alias, die SMTP-Adresse oder den Display Name des zu exportierenden Postfachs.
Anforderungen:
- Um den Export ausführen zu können, muss der Anwender Mitglied einer Gruppe mit der Rolle Mailbox Import Export sein. Man erledigt das am einfachsten mit Hilfe des nachfolgenden Skripts:
New-ManagementRoleAssignment -Role "Mailbox Import Export" -User "<user name or alias>"
Um mehr zu erfahren, lesen Sie den Abschnitt “Hinzufügen einer Rolle zu einer Rollengruppe” in diesem Microsoft-Artikel.
- Die Lokation der PST-Datei muss ein öffentlicher Ordner sein.
Syntax
Das nachstehende Beispiel präsentiert den Aufbau des Export-Requests, um ein ganzes Postfach in einer PST-Datei zu sichern:
New-MailboxExportRequest -Mailbox <user> -FilePath \\<server FQDN>\<shared folder name>\<PST name>.pst
Der Umfang des zu sichernden Inhalts kann durch zusätzliche Parameter eingeschränkt werden, z.B.:
-ContentFilter
Der Parameter definiert, welche Kriterien ein Element erfüllen muss, damit es in die PST-Datei verschoben wird. Die Konditionen werden in standardmäßigen PowerShell-Klammern eingegeben, zusammen mit einigen filterbaren Elementeigenschaften (Stellvertreterzeichen werden unterstützt). Ein Beispielskript für den Export von Elementen, welche vor 2013-01-01 empfangen wurden und deren Betreff mit fwd: beginnt, sieht aus wie folgt:
New-MailboxExportRequest -Mailbox <user> -ContentFilter {(Received -lt '01/01/2013') -and (Subject -like 'fwd*')} -FilePath \\<server FQDN>\<shared folder name>\<PST name>.pst
-ExcludeFolders und -IncludeFolders
Der Parameter schließt bestimmte Ordner aus und ein. Zur Auswahl stehen alle Ordner des Typs Postfach. Es sind zudem zwei hilfreiche Optionen verfügbar:
- Möglichkeit, persönliche Ordner im Stammverzeichnis zu filtern. Hierfür setzt man die Syntax <FolderName>/* ein.
- Möglichkeit, Exchange-Postfachordner unabhängig von der Systemsprache zu filtern. Hierfür setzt man die Syntax #<FolderName>#/* ein.
Ein Beispielskript für den Export der Ordner Inbox und Sent Items sieht aus wie folgt:
New-MailboxExportRequest -IncludeFolders "#Inbox#/*","#SentItems#" -Mailbox <user> -FilePath \\<server FQDN>\<shared folder name>\<PST name>.pst
-IsArchive
Ein Switch-Parameter, welcher dafür sorgt, dass nur das Archiv exportiert wird. Beispiel:
New-MailboxExportRequest -Mailbox <user> -IsArchive -FilePath \\<server FQDN>\<shared folder name>\<PST name>.pst
-Name
Weist einem Export-Request einen Namen zu. Die Option erweist sich als hilfreich beim Tracking oder wenn für ein Postfach mehr als 10 Export-Requests gesetzt werden sollen. Standardmäßig weist Exchange bis zu 10 aufeinanderfolgende Namen zu (von MailboxExport bis MailboxExport9). Nachdem alle 10 Namen vergeben wurden, muss man entweder die Export-Requests flushen oder man vergibt neue Namen mit Hilfe des Parameters -Name. Beispiel:
New-MailboxExportRequest -Name <unique name> -Mailbox <user> -IsArchive -FilePath \\<server FQDN>\<shared folder name>\<PST name>.pst
Zusätzliche Informationen
Ein einzelnes Skript MailboxExportRequest kann selbstverständlich mehrere Parameter enthalten (die o.g. Parameter sind nur einige Beispiele). Eine vollständige Übersicht der Parameter sowie Angaben zu der Syntax und weitere Details finden Sie in diesem Microsoft-Artikel.
PST-Export in Serie
Die Anforderungen hier sind gleich wie beim Export eines einzelnen Postfachs:
- Um den Export ausführen zu können, muss der Anwender Mitgiled einer Gruppe mit der Rolle Mailbox Import Export sein (siehe oben).
- Die Lokation der PST-Datei muss ein öffentlicher Ordner sein.
Methode 1
Die Liste aller Postfächer wird als Variable gespeichert (in unserem Beispiel als AllMailboxes):
$AllMailboxes = Get-Mailbox
Alle Mailboxen werden in PST-Dateien exportiert, mit Namen, die auf dem Postfachalias basieren (zum Verwenden einer anderen Postfacheigenschaft ersetzt man die Phrase “Alias” durch den Eigenschaftsnamen):
$AllMailboxes|%{$_|New-MailboxExportRequest -FilePath \\<server FQDN>\<shared folder name>\$($_.Alias).pst}
Es können noch weitere Parameter genauso wie bei einzelnen Postfachexporten eingebunden werden (siehe oben).
Methode 2
Der Outcome bei Verwendung des nachfolgenden Skripts ist identisch wie für Methode 1 (verwendet wird hier jedoch der Befehl foreach):
foreach ($Mailbox in (Get-Mailbox)) { New-MailboxExportRequest -Mailbox $Mailbox -FilePath "\\<server FQDN>\<shared folder name>\$($Mailbox.Alias).pst" }
Einschränkung der Anzahl für zu exportierende Postfächer
Beide Methoden führen zum Export aller Postfächer. Im Fall, dass der Export eingeschränkt werden soll, kann man auf den Filterparameter Get-Mailbox zurückgreifen. Das nachstehende Beispielskript listet Postfächer innerhalb der Gruppe export1.
Get-Mailbox -Filter {MemberOfGroup -ne $export1}
WICHTIG: Das Verwenden des Parameters -Filter in Verbindung mit dem CmdLet Get-Mailbox schließt Mailboxen aus, welche in dem Parameter definiert werden. Zum Einschränken der Anzahl für zu exportierende Postfächer (z.B. Batch1) müssen mit dem Parameter -Filter alle Mailboxen ausgeschlossen werden, die nicht Teil von Batch1 sind – dazu verwendet man den Operator -ne (not equals). Durch Hinzufügen des -Filter -Parameters zu den CmdLets Get-Mailbox in Methode 1 und Methode 2 schränkt man die Anzahl der exportierten Postfächer ein.
Vollständige Liste der filterbaren Postfacheigenschaften
Erläuterung zum CmdLet Get-Mailbox
Postfach-Backup in PST-Datei: Licht und Schatten
Die Ablage der Postfächer in PST-Dateien ist mit erheblichen Problemen verbunden, die in erster Linie aus unpraktischem Handling und Fehleranfälligkeit der Dateien resultieren:
Pro | Contra |
---|---|
|
|
Exchange: Tool für Brick-level-Sicherung
Alle Vorteile eines PowerShell-basierten Mailbox-to-PST-Backups ohne die o.g. Nachteile und Risiken? CodeTwo Backup for Exchange ermöglicht sicheres granulares Postfach-Backup in einer zuverlässigen und leicht zu bedienenden Datenbank. Mit dem Programm können mehrere simultane Backup- und Wiederherstellungs-Jobs eingerichtet werden. Die Anwendung legt die Kopien versionsweise ab und beinhaltet eine vollständige Option zur Artikelsuche und -vorschau. Zusätzlich gibt es die Möglichkeit, die Speicher in PST-Dateien zu archivieren (als eines von zwei verfügbaren Archivierungsmodellen). Mehr über die Anwendungsbeispiele von CodeTwo Backup erfahren
Postfach-Migration über PST: Pro und Contra
Wie bereits erwähnt, können PST-Dateien auch dazu verwendet werden, Postfächer von einem Exchange Server zu einem anderen zu migrieren (einschließlich Exchange Online). Diese Methode heißt manuelle Migration: Sie müssen keine Migrationsendpunkte erstellen. Stattdessen müssen Sie eine Umgebung von Grund auf bauen and dann die Postfachinhalte aus CSV-Dateien importieren.
Pros | Cons |
---|---|
|
|
Einfache Migration von Exchange-Postfächern
Wenn Sie zahlreiche Postfächer migrieren möchten, ist die PST-Migration keine gute Wahl. Sie erfordert großen Arbeitsaufwand und die Zuverlässigkeit der PST-Dateien ist gering. Somit wird Sie zu der stressigsten Prozeduren in der IT-Welt.
Die folgenden Migrationstools sparen Ihnen viel Zeit und Nerven.
CodeTwo Exchange Migration erlaubt Ihnen, von jedem Exchange Server (2010+ oder Exchange Online) oder von einem IMAP-Server direkt zu beliebtem Exchange Server (darunter Exchange 2019) zu migrieren.
CodeTwo Office 365 Migration hilft Organisationen bei der Migration von jedem Quellserver zu Exchange Online. Das Tool unterstützt auch Migrationen zwischen zwei Microsoft 365-Tenants.
Beide Migrationstools:
- vereinfachen und automatisieren den Migrationsprozess,
- kommen mit einem detaillierten Migrationsplan,
- erstellen automatisch Postfächer,
- unterstützen die Migration öffentlicher Ordner,
- wurde gemäß dem nach ISO/IEC 27001 & ISO/IEC 27018-zertifizierten Informationssicherheitssystem (ISMS) entwickelt. Sie haben die Garantie, dass Sie weltklassige Sicherheit und Zuverlässigkeit bekommen.
Die Exchange-Shell muss “als Administrator” ausgeführt werden, damit das cmdlet verfügbar ist.
Ich bin gerade auf der Suche nach einem Befehl der mir alle Inhalte des Postfachs exportiert die sagen wir älter als 01.01.2016 sind. Hat hier wer eine Idee? Also alle Unterordner und Elemente darin, sowie alle gesendeten Elemente etc.. Leider werde ich hier nicht wirklich schlau draus. Hat wer einen Tipp? Danke!
Hallo Simlo,
Verwende den folgenden PowerShell-Befehl:
foreach ($Mailbox in (Get-Mailbox)) { New-MailboxExportRequest -Mailbox $Mailbox -ContentFilter (Received -gt '01/01/2016') -FilePath "\\[server FQDN]\[shared folder name]\$($Mailbox.Alias).pst" }
Vergiss nicht deinen FQDN anzugeben. Du kannst ihn mit dem folgenden Befehl finden:
(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
MfG,
Pawel
Hallo,
ich habe diese Funktion bei SBS2011 gern genutzt, vor allem, da sie wenn man sie das zweite Mal ausgeführt hat, die vorherige .pst-Datei aktualisiert hat. Kann es sein, dass dies nun mit Server 2016 nicht mehr funkioniert? Bei der 2. Ausgabe wird die Datei größenmäßig verdoppelt und “Get-MailboxExportRequest” gibt failed aus!?
MFG
Tim
Hallo Tim,
Wenn das Cmdlet zum zweiten Mal in derselben Ziel-PST-Datei ausgeführt wird, wird die Datei überschrieben. Oder zumindest hat es so funktioniert, seit ich mich erinnere. Deshalb war es immer keine zuverlässige Methode der Sicherung. Es gibt keine Möglichkeit, es für inkrementelles Backup zu verwenden. Du kannst auch versuchen, mit dem Cmdlet
Get-MailboxExportRequestStatistics
einige Details zu finden, warum der Export fehlgeschlagen ist.MfG,
Pawel
Wie kann ich denn prüfen, wann der Export abgeschlossen ist? Also außer auf die Datei zu schauen und zu sehen wann sie nicht mehr wächst :)
Hallo,
Sie könnten dafür das Cmdlet Get-MailboxExportRequest verwenden. Wenn das folgende Cmdlet beispielsweise keine Ergebnisse zurückgibt, bedeutet dies, dass alle Requests abgeschlossen sind: Get-MailboxRequest -Status InProgress -Database (Ihre Datenbank). Um detaillierte Informationen zu einer einzelnen Export-Request zu erhalten, verwenden Sie die Attribute –identity oder –name.
MfG,
Pawel
Hallo,
an meinem Exch.2010 mit allen SPs und Updates gibt es das cmdlet nicht:
New-MailboxExportRequest
Was kann man machen?
Der wahrscheinlichste Grund ist, dass Ihrem Konto die Rolle “Mailbox Import Export” nicht zugewiesen wurde.
Bitte versuchen Sie,
New-ManagementRoleAssignment -Role "Mailbox Import Export" -User Ihre_domain\Ihr_Benutzerkonto
zu verwenden.Nach der Zuweisung dieser Berechtigungen starten Sie PowerShell erneut, und versuchen Sie erneut, das Cmdlet
New-MailboxExportRequest
auszuführen.Hallo Herr Nürnberg,
vielen Dank für die Anleitung und den Denkanstoß den ich gesucht hatte.
Aus gegebenen Anlass habe ich noch eine nützliche Variante. In dieser werden die Mitglieder einer Sicherheitsgruppe abgefragt und in die Schleife mit Ihrem SamAccountName übergeben da es vorkommt, dass der Alias nicht vernünftig bis gar nicht ausgegeben wird.
foreach ($AllMailboxes in (Get-ADGroupMember “Sicherheitsgruppe mit Mitgliedern” | Select-Object SamAccountName)) { New-MailboxExportRequest -Mailbox $AllMailboxes -FilePath “\\\\$($AllMailboxes.SamAccountName).pst” }
Beste Grüße