Exchange 2013/2010: Postfach-Back-up per PST-Export (PowerShell)

Eine funktionierende E-Mail-Organisation geht zwangsweise mit effizientem Postfach-Back-up 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 Back-up 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 2013 und Exchange 2010.

Export eines Postfachs in PST-Datei

Um den Inhalt eines 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 TechNet-Artikel.

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 findet man hier: TechNet: single mailbox exports to PST details

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 Shared Folder 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 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 ($AllMailboxes in (Get-Mailbox)) { New-MailboxExportRequest -Mailbox $AllMailboxes -FilePath "\\<server FQDN>\<shared folder name>\$($AllMailboxes.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-Back-up 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:

PROCONTRA
1. Brick-level-Sicherung mit hoher Granularität1. Anfällig gegen Fehler und Korruption
2. Unterstützung für Serien-Back-ups2. Keine Search-Funktion für alle Postfächer
3. Customizability3. Keine zentralisierte Verwaltung für Jobs, Speicher etc.
4. Kostenlos4. Keine Back-up-Statistik
5. Erschwerte Verwaltung durch PowerShell-Skripte
6. Datenverlustrisiko
7. Vorschau des Back-ups nur via Outlook
8. Keine Versionsweise Ablage, kein inkrementelles Back-up (hoher Ressourcen-Aufwand)
9. Scheduling nur via Windows Task Manager

Exchange: Tool für Brick-level-Sicherung

Alle Vorteile eines PowerShell-basierten Mailbox-to-PST-Back-ups ohne die o.g. Nachteile und Risiken? CodeTwo Backup for Exchange ermöglicht sicheres granulares Postfach-Back-up in einer zuverlässigen und leicht zu bedienenden Datenbank. Mit dem Programm können mehrere simultane Back-up- und Wiederherstellungs-Jobs eingerichtet werden. Die Kopien legt die Anwendung versionsweise ab. Und das allerbeste ist, es wird nicht mit PST-Dateien hantiert.

3 thoughts on “Exchange 2013/2010: Postfach-Back-up per PST-Export (PowerShell)


  1. 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

  2. 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.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*