Export-Mailbox / Import-Mailbox / Import-PST / Export-PST
Mit Exchange 2007 hat Microsoft einige Änderungen mit Exchange eingeführt. EXMERGE funktioniert offiziell nicht mehr mit Exchange 2007 und die früheren Migrationstools wie MailMig funktionieren auch nur bis Exchange 2003. Dafür hat Microsoft das PowerShell Commandlet "Export-Mailbox" und "Import-Mailbox" bereit gestellt, welches Postfachinhalte exportieren und importieren kann. Aber der Weg ist schon etwas steiniger, weil man dazu die Hilfe von Outlook braucht und mit Exchange 2010 RTM sogar auf Outlook 2010 64bit warten musste.
Discontinued Features
http://technet.microsoft.com/en-us/library/aa998911.aspx
Export-Mailbox und Import-Mailbox sind mit dem Wechsel von Exchange 2010
RTM auf SP1 abgekündigt.
Microsoft hat aber mit dem E2010 SP1 nun entsprechende Commandlets nachgeliefert, die auf dem Server einen Export und Import erlauben, ohne dass Outlook auf dem Server erforderlich wäre. Diese neue Funktion beschreibt diese Seite. Trotzdem finden Sie auch hier noch Links zu Export-Mailbox etc., die den alten Weg beschreiben. Für Office 365 gibt es einen vergleichbaren weg
- PST Export aus EXO -das Gegenstück zum PST-Import
- PST Import nach EXO - Frühere Daten per PST in Exchange Online importieren
- Org2Org 2016 - Übertragen von Postfächern zwischen Organisationen
- Org2Org Exmerge - der frühere Weg mit CDO auf dem Client
Funktionsweise
Der Export und Import von PST-Dateien in Postfächer wird aktuell (Exchange 2010 SP1) nur per PowerShell administriert und selbst dann importiert nicht das PowerShell Commandlet die Daten, sondern der Mailbox Replication Service. Per PowerShell wird nur eine Auftragswarteschlange verwaltet. Damit die funktioniert müssen also zwei Dinge erfüllt sein:
- Administrative Rolle
Selbst ein DomainAdmin "sieht" die neuen Befehle erst mal nicht. Sie müssen ihm erst mal die Berechtigungen dazu geben - PST in einem Share
Der Zugriff auf die PST-Dateien erfolgt zwingend über einen Netzwerkshare (SMB)
Aber eines nach dem anderen.
Commandlets
Für die Behandlung von Daten mittels PST-Dateien gibt es auf dem Server gleich mehrere Commandlets:
Commandlet | Bedeutung |
---|---|
New-MailboxImportRequest |
Erstellt einen Auftrag zum Import einer PST-Datei in ein Postfach |
Get-MailboxImportRequest |
Listet die aktuell aktiven Aufträge |
Set-MailboxImportRequest |
Erlaubt das ändern eines Auftrags, solange er noch nicht ausgeführt wird |
Suspend-MailboxImportRequest |
Hält einen Auftrag an |
Resume-MailboxImportRequest |
Setzt einen vorher angehaltenen Auftrag wieder fort |
Remove-MailboxImportRequest |
Entfernt einen Auftrag aus der Warteschlange |
Get-MailboxImportRequestStatistics |
Liefert eine ausführliche Statistik |
Wie Sie an dem Wort "Auftrag" schon bemerkt haben dürften, importieren und exportieren die Commandlets nicht selbst, sondern es wird ein Auftrag in eine Warteschlange gestellt, die dann von einem Exchange Server abgearbeitet wird. Zuständig hierfür ist der "Mailbox Replication Service" (MRS) der auch sonst Postfächer zwischen Servern verschiebt.
- Get-MailboxExportRequest
http://technet.microsoft.com/en-us/library/ff607479.aspx - Get-MailboxExportRequestStatistics
http://technet.microsoft.com/en-us/library/ff607316.aspx - New-MailboxExportRequest
http://technet.microsoft.com/en-us/library/ff607299.aspx - Remove-MailboxExportRequest
http://technet.microsoft.com/en-us/library/ff607464.aspx - Resume-MailboxExportRequest
http://technet.microsoft.com/en-us/library/ff607476.aspx - Set-MailboxExportRequest
http://technet.microsoft.com/en-us/library/ff607312.aspx - Suspend-MailboxExportRequest
http://technet.microsoft.com/en-us/library/ff607305.aspx - Get-MailboxImportRequest
http://technet.microsoft.com/en-us/library/ff607368.aspx - Get-MailboxImportRequestStatistics
http://technet.microsoft.com/en-us/library/ff607315.aspx - New-MailboxImportRequest
http://technet.microsoft.com/en-us/library/ff607310.aspx - Remove-MailboxImportRequest
http://technet.microsoft.com/en-us/library/ff607311.aspx - Resume-MailboxImportRequest
http://technet.microsoft.com/en-us/library/ff607306.aspx - Set-MailboxImportRequest
http://technet.microsoft.com/en-us/library/ff607317.aspx - Suspend-MailboxImportRequest
http://technet.microsoft.com/en-us/library/ff607309.aspx - Understanding Move Requests
http://technet.microsoft.com/en-us/library/dd298174.aspx - How does move mailbox really work?
http://blogs.technet.com/b/exchange/archive/2005/02/15/373021.aspx
PST-Share
Damit ist aber auch klar, warum man eine PST-Datei immer mit einem UNC-Pfad angeben muss. Der Server, auf dem der Import ausgeführt wird, ist ja nicht zwingend auch der PC, auf dem der Auftrag erstellt wird. Die PST-Dateien müssen also in einem Share liegen, auf dem dann auch "Exchange Trusted Subsystem" berechtigt ist.
Für die weiteren Befehle muss dann der UNC-Pfad (in dem Beispiel \\W2K8R2E2010\pst) verwendet werden. Hierbei kann man durchaus in Fallen laufen, da schon Exchange 2010 Server mindestens Windows 2008 oder 2008 R2 erforderlich macht und das LmCompatibilityLevel dabei auf "3" steht. Dies bedeutet, dass der Client nur noch NTLM2 zur Authentifizierung nutzt und auf NTLM verzichtet. Ist der Server dabei aber ein "einfaches SMB-System", welches NTLM2 nicht unterstütze, dann wird das nichts. Über eine Änderung in der Registrierung mit nachfolgendem Neustart könnten Sie dies aber abschwächen, wovon ich aber abrate.
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\LmCompatibilityLevel:DWORD
- LmCompatibilityLevel
http://technet.microsoft.com/en-us/library/cc960646.aspx - Network security: LAN Manager authentication level
http://technet.microsoft.com/en-us/library/cc738867(WS.10).aspx
Am besten nutzen Sie einen Windows 2008 Server oder höher
Management Rolle
Um bei Exchange 2007 einen Export-Mailbox durchzuführen, greifen Sie ja noch selbst mit den Rechten des angemeldeten Benutzers zu (siehe auch Mailboxrechte). Bei Exchange 2010 und höher sieht es anders aus, da hier der Export-Prozess selbst durch den Exchange Server ausgeführt wird und Sie als Administrator nur den Auftrag erteilen. Dazu benötigen Sie aber die entsprechenden Berechtigungen in den Exchange Rollen. Microsoft hat diese Rollen sogar schon definiert aber noch keiner Sicherheitsgruppe zugewiesen. Dann können Sie allein über die Mitgliedschaften in der Gruppe steuern, wer Postfächer exportieren und importieren darf. Hier der Befehl mit der entsprechenden Ausgabe:
[PS] C:\>New-ManagementRoleAssignment ` -Name "Mailbox ImpExp" ` -SecurityGroup "MailboxImportExport" ` -Role "Mailbox Import Export" Name Role RoleAssigneeName RoleAssigneeType AssignmentMethod EffectiveUserName ---- ---- ---------------- ---------------- ---------------- ---------------- Mailbox ImpExp Mailbox Import... MailboxImportE... SecurityGroup Direct
# Vergabe der Rechte an einen Benutzer New-ManagementRoleAssignment -Name PSTExport -User administrator -Role "Mailbox Import Export"
Ich rate ihnen dringend dazu, diese Berechtigungen nicht direkt an den Benutzer zu binden, sondern eine entsprechende Sicherheitsgruppe anzulegen. Sie können das Recht aber auch direkt einem Benutzer zuweisen und damit das Anlegen der Gruppe, die Pflege der Mitgliedschaft und ein erneutes Anmelden des administrativen Kontos ersparen. Erst dann haben die Mitglieder der entsprechenden Gruppe erst Zugriff auf die PowerShell-Befehle.
- RBAC
- Add the Mailbox Import Export Role to a Role Group
http://technet.microsoft.com/en-us/library/ee633452.aspx - RBAC - Permissions
http://technet.microsoft.com/en-us/library/dd638132.aspx# - Export-Mailbox
http://technet.microsoft.com/en-us/library/aa998579.aspx - Add the Mailbox Import Export Role to a Role Group
http://technet.microsoft.com/en-us/library/ee633452.aspx
PST-Format: UNICODE oder ANSI
Eine kleine Randbemerkung sei noch erlaubt. Es gibt zwei verschiedene PST-Formate, die je nach eingesetzter Version von Outlook per Default geschrieben werden. Die älteren PST-Dateien sind oft noch im ANSI-Format und damit auf 2 GB beschränkt. Was früher unermesslich viel Platz war, ist heute schon wieder zu klein. Outlook 2003 hat erstmals UNICODE-PST-Dateien in Verbindung mit Exchange geschrieben. Hier die Details aus.
- Outlook XP (2002) oder älter
Diese Versionen konnten immer nur ANSI-PST-Dateien schreiben. Dies betrifft auch ältere Versionen von EXMERGE - Outlook 2003 im "Internet Mode (IMAP4/POP3)
Hier wurde als lokaler Store eine ANSI-PST by Default angelegt, obwohl Outlook 2003 durchaus schon UNICODE könnte. - Outlook 2003 mit Exchange (MAPI, Cached Mode etc.)
Sobald ein Exchange Server im Profil enthalten ist, wurden mit Outlook 2003 erstmals UNICODE-PST-Dateien angelegt - Outlook 2007 und höher
Hier wurden generell nur noch UNICODE-PST-Dateien angelegt.
Die neuen Exchange 2010 SP1 Commandlets unterstützen sowohl UNICODE als auch ANSI. Von der Seite ist also kein Einschränkung zu erwarten. Sie könnten aber auf das Problem laufen ,dass ihnen jemand eine ca. 2GB große PST-Datei zum Import gibt, die aber tatsächlich eine defekte ANIS-PST-Datei ist, die einfach nicht größer als 2GB werden kann.
Weitere Links zum Thema PST
- 830336 The .pst file has a different format and folder size limit in Outlook 2007 and in Outlook 2003
- 832925 How to configure the size limit für both (.pst) and (.ost) files in Outlook 2003
- Convert an old PST to a unicode PST
http://office.microsoft.com/en-us/outlook-help/convert-a-non-unicode-data-file-pst-to-a-unicode-data-file-pst-HP001038351.aspx
http://www.slipstick.com/outlook/ansi-to-unicode.asp - How to Determine if a PST is ANSI or unicode
http://www.expta.com/2008/08/how-to-determine-if-pst-is-ansi-or.html
Archiv
Exchange 2010 und höher kennen nun auch ein "Personal Archiv", welches quasi eine zweite Mailbox neben dem primären Postfach ist. Mit der richtigen Option können nun auch Objekte in diese Archivmailbox importiert oder von dort exportiert werden, z.B. mit:
New-MailboxExportRequest ` -FilePath c:\temp\fcariusarchiv.pst ` -Mailbox User1 ` -IsArchive
Bedenken Sie aber, dass der Umweg über PST-Dateien etwas dauert und Sie beim Import die Transaktionsdateien im Blick behalten sollten.
Export/Import-Aufträge einstellen
Tja manchmal ist eine neue Version auch ein Rückschritt, zumindest für Funktionen in der GUI. In Exchange 2010 RTM war der Export-Mailbox und Import-Mailbox noch in der GUI möglich aber erst sichtbar, wenn Sie die entsprechenden Rolle hatten. Allerdings mussten Sie dazu eben auch Outlook 2010 x64 auf dem Server installiert haben und einige andere Randbedingungen erfüllen. In Exchange 2010 SP1 ist die PST-Funktion nun in direkt integriert. Dafür ist aber der Import und Export nicht mehr in der GUI vorhanden. Nun das ist nicht wirklich schlimm, da die Befehle doch überschaubar sind.
New-MailboxExportRequest -Mailbox 'User1' -BadItemLimit 5 ` -FilePath '\\ex2016A\PST\User1.pst
New-MailboxImportRequest -Mailbox 'User1' ` -FilePath '\\ex2016A\PST\User1.pst' ` -ConflictResolutionOption KeepLatestItem ` -BadItemLimit 5
Interessant sind hier vor allem die "BadItemLimit". Auch in einem Postfach gibt es immer mal wieder "defekte Objekte". Das ist unschön aber ein paar Verluste sind in der Regel tolerierbar. Meist sind es entweder sehr alte Mails oder insbesondere Termine machen hier häufiger Probleme.
Fehlersuche
Erste Anlaufstelle ist natürlich einmal ein "Get-MailboxImportRequest" bzw. analog dazu der "Get-MailboxExportRequest", welcher die aktuellen Aufträge anzeigt. Oft sehen Sie da schon einen ersten Fehler.
[PS] C:\>Get-MailboxExportRequest Name Mailbox Status ---- ------- ------ MailboxExport msxfaq.de/Firma/User1 Failed
Deutlicher wird der Fehler aber, wenn die die fehlerhaften Aufträge noch per Pipe an "get-mailboximportstatistics" übergeben. (etwas gekürzt)
[PS] C:\>Get-MailboxExportRequest |Get-MailboxExportRequestStatistics| fl Name : MailboxExport Status : Failed StatusDetail : FailedOther SyncStage : None Flags : IntraOrg, Push, Suspend RequestStyle : IntraOrg Direction : Push Protect : False Priority : Normal WorkloadType : Local Suspend : True FilePath : \\ex2016A\PST\User1.pst ComplianceStorePath : PreferredMessageFormat : Default SourceAlias : User1 SourceIsArchive : False SourceExchangeGuid : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx SourceRootFolder : RecipientTypeDetails : UserMailbox SourceVersion : Version 15.1 (Build 669.0) SourceMailboxIdentity : msxfaq.de/Firma/User1 SourceDatabase : Mailboxes SourceServer : ex2016A.msxfaq.net TargetRootFolder : IncludeFolders : {} ExcludeFolders : {} ExcludeDumpster : False ConflictResolutionOption : KeepSourceItem AssociatedMessagesCopyOption : Copy BatchName : StartAfter : CompleteAfter : ContentFilter : ((((Received -lt '20.04.2016 00:00:00') -and (Received -ge '20.01.2015 00:00:00'))) -or (((Sent -lt '20.04.2016 00:00:00') -and (Sent -ge '20.01.2015 00:00:00')))) ContentFilterLanguage : BadItemLimit : 0 BadItemsEncountered : 0 LargeItemLimit : 0 LargeItemsEncountered : 0 QueuedTimestamp : 23.02.2018 12:44:34 StartTimestamp : LastUpdateTimestamp : 23.02.2018 12:44:41 LastSuccessfulSyncTimestamp : InitialSeedingCompletedTimestamp : CompletionTimestamp : SuspendedTimestamp : OverallDuration : 00:00:07.0625422 TotalSuspendedDuration : 00:00:00 TotalFailedDuration : 00:00:35.4221029 TotalQueuedDuration : 00:00:04.7344327 TotalInProgressDuration : 00:00:02.3281095 TotalStalledDueToContentIndexingDuration : 00:00:00 TotalStalledDueToMdbReplicationDuration : 00:00:00 TotalStalledDueToMailboxLockedDuration : 00:00:00 TotalStalledDueToReadThrottle : 00:00:00 TotalStalledDueToWriteThrottle : 00:00:00 TotalStalledDueToReadCpu : 00:00:00 TotalStalledDueToWriteCpu : 00:00:00 TotalStalledDueToReadUnknown : 00:00:00 TotalStalledDueToWriteUnknown : 00:00:00 TotalTransientFailureDuration : 00:00:00 TotalIdleDuration : 00:00:02.1250411 MRSServerName : EstimatedTransferSize : 0 B (0 bytes) EstimatedTransferItemCount : 0 BytesTransferred : 0 B (0 bytes) BytesTransferredPerMinute : 0 B (0 bytes) ItemsTransferred : 0 PercentComplete : 0 CompletedRequestAgeLimit : 3650.00:00:00 PositionInQueue : InternalFlags : SkipKnownCorruptions FailureCode : -2146233088 FailureType : InvalidContentFilterPermanentException FailureSide : Message : The attempt to deserialize failed for type: 'System.UnitySerializationHolder'. FailureTimestamp : 23.02.2018 12:44:41 IsValid : True ValidationMessage : OrganizationId : RequestGuid : 4815c0b0-dfde-44ea-a63f-25921a7efe4c RequestQueue : Mailboxes Identity : 7b475535-a572-4073-b90a-2c3feb0072dd\4815c0b0-dfde-44ea-a63f-25921a7efe4c DiagnosticInfo : Report : RequestExpiryTimestamp : 30.01.2118 11:44:34 ObjectState : New
In dem Fall sehen Sie, dass der ContentFilter "falsch" ist und von Exchange nicht umgesetzt werden kann.
Auch das "MSExchange Management"-Eventlog ist eine gute Quelle um solche Fehler dann auch schnell zu erkennen. Sie können auf die Events überwachen.
Log Name: MSExchange Management Source: MSExchange CmdletLogs Date: 21.02.2018 13:25:38 Event ID: 6 Task Category: General Level: Error Keywords: Classic User: N/A Computer: ex2016A.msxfaq.net Description: Cmdlet failed. Cmdlet New-MailboxExportRequest, parameters -ContentFilter "((Received -lt '04/20/2016') -and (Received -ge '01/20/2015')) -or ((Sent -lt '04/20/2016') -and (Sent -ge '01/20/2015'))" -Mailbox "User1" -FilePath "\\ex2016A\pst\User1.pst". Event Xml: <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="MSExchange CmdletLogs" /> <EventID Qualifiers="49152">6</EventID> <Level>2</Level> <Task>1</Task> <Keywords>0x80000000000000</Keywords> <TimeCreated SystemTime="2018-02-21T12:25:38.000000000Z" /> <EventRecordID>668033</EventRecordID> <Channel>MSExchange Management</Channel> <Computer>ex2016A</Computer> <Security /> </System> <EventData> <Data>New-MailboxExportRequest</Data> <Data>-ContentFilter "((Received -lt '04/20/2016') -and (Received -ge '01/20/2015')) -or ((Sent -lt '04/20/2016') -and (Sent -ge '01/20/2015'))" -Mailbox "user1" -FilePath "\\EX01\$\fcarius2.pst"</Data> <Data>msxfaq.de/Firma/User1</Data> <Data>S-1-5-21-11949449-30417519-71842111-9813</Data> <Data>S-1-5-21-11949449-30417519-71842111-9813</Data> <Data>Remote-ManagementShell-Unknown</Data> <Data>10936 w3wp#MSExchangePowerShellAppPool</Data> <Data> </Data> <Data>121</Data> <Data>00:00:00.0468792</Data> <Data>View Entire Forest: 'False', Default Scope: 'msxfaq.net', Configuration Domain Controller: 'dc1.msxfaq.net', Preferred Global Catalog: 'dc1.msxfaq.net', Preferred Domain Controllers: '{ dc1.msxfaq.net }'</Data> <Data>Microsoft.Exchange.MailboxReplicationService.RemotePermanentException: The server or share name specified in the path may be invalid, or the file could be locked. ---> Microsoft.Exchange.MailboxReplicationService.RemotePermanentException: The network name cannot be found. --- End of inner exception stack trace --- at Microsoft.Exchange.MailboxReplicationService.MailboxReplicationServiceFault.<>c__DisplayClass1.<ReconstructAndThrow>b__0() at Microsoft.Exchange.MailboxReplicationService.ExecutionContext.Execute(Action operation) at Microsoft.Exchange.MailboxReplicationService.MailboxReplicationServiceFault.ReconstructAndThrow(String serverName, VersionInformation serverVersion) at Microsoft.Exchange.MailboxReplicationService.WcfClientWithFaultHandling`2.<>c__DisplayClass1.<CallService>b__0() at Microsoft.Exchange.Net.WcfClientBase`1.CallService(Action serviceCall, String context) at Microsoft.Exchange.MailboxReplicationService.WcfClientWithFaultHandling`2.CallService(Action serviceCall, String context) at Microsoft.Exchange.MailboxReplicationService.MailboxReplicationServiceClient.ValidateAndPopulateRequestJob(TransactionalRequestJob requestJob, List`1& entries) at Microsoft.Exchange.Management.Migration.MailboxReplication.RequestBase.NewRequest`1.DoMrsValidateAndPopulate(TransactionalRequestJob requestJob) at Microsoft.Exchange.Management.Migration.MailboxReplication.RequestBase.NewRequest`1.InternalValidate() at Microsoft.Exchange.Management.Migration.MailboxReplication.MailboxExportRequest.NewMailboxExportRequest.InternalValidate() at Microsoft.Exchange.Configuration.Tasks.Task.<ProcessRecord>b__c() at Microsoft.Exchange.Configuration.Tasks.Task.InvokeRetryableFunc(String funcName, Action func, Boolean terminatePipelineIfFailed)</Data> <Data>0</Data> <Data>Microsoft.Exchange.MailboxReplicationService.RemotePermanentException: The network name cannot be found. </Data> <Data>Ex6DEDE4</Data> <Data> </Data> <Data> </Data> <Data>False</Data> <Data> </Data> <Data>0 objects execution has been proxied to remote server.</Data> <Data> </Data> <Data> </Data> <Data>0</Data> <Data>ActivityId: 55556807-73a8-4c25-b6d9-defb00ecd5d5</Data> <Data>ServicePlan:;IsAdmin:True;</Data> <Data> </Data> <Data>en-US</Data> </EventData> </Event>
Weitere Links
- EXMERGE
- MailMig
- Mailboxrechte
- RBAC
- Moving mailboxes, Exchange 2010 way
http://blogs.technet.com/b/exchange/archive/2010/07/19/455550.aspx - View Mailbox Import Request Properties
http://technet.microsoft.com/en-us/library/ff607427.aspx - Add the Mailbox Import Export Role to a Role Group
http://technet.microsoft.com/en-us/library/ee633452.aspx - RBAC - Permissions
http://technet.microsoft.com/en-us/library/dd638132.aspx# - Export-Mailbox
http://technet.microsoft.com/en-us/library/aa998579.aspx - Import-Mailbox
http://technet.microsoft.com/en-us/library/bb629586%28EXCHG.80%29.aspx - Export-Mailbox
http://technet.microsoft.com/en-us/library/aa998579%28EXCHG.80%29.aspx - How to Import Mailbox Data
http://technet.microsoft.com/en-us/library/bb691363(EXCHG.80).aspx - How to Export and Import mailboxes to PST files in
Exchange 2007 SP1
http://blogs.technet.com/b/exchange/archive/2007/04/13/437745.aspx - Export PST from Exchange 2010
http://www.techguy.at/en/2010/07/05/export-pst-from-exchange-2010/ - How does move mailbox really work?
http://blogs.technet.com/b/exchange/archive/2005/02/15/373021.aspx - Exchange Server 2010 SP1: Mailbox Export and Import
http://microsoftblog.globalknowledge.com/2010/09/16/exchange-server-2010-sp1-mailbox-export-and-import/ - Export-Mailbox (Exchange 2010 RTM, nicht SP1)
http://technet.microsoft.com/en-us/library/aa998579.aspx - Delete an email message from a list of mailboxes
http://msexchangeguru.com/2011/05/06/delete-email/ - Tutorial bei msexchange.org
http://www.msexchange.org/articles_tutorials/exchange-server-2010/management-administration/look-import-export-mailbox-improvements-exchange-2010-service-pack-1-part1.html
http://www.msexchange.org/articles_tutorials/exchange-server-2010/management-administration/look-import-export-mailbox-improvements-exchange-2010-service-pack-1-part2.html