Importieren und Exportieren von Dateien in der Exchange-Verwaltungsshell

Gilt für: Exchange Server 2013

Microsoft Exchange Server 2013 verwendet Windows PowerShell-Befehlszeilenschnittstellen-Remoting zum Herstellen einer Verbindung zwischen dem Server oder Computer zum Verwalten von Exchange und dem Server mit Exchange 2013, den Sie verwalten. In Exchange 2013 wird dies als Exchange-Remoteverwaltungshell oder Remoteshell bezeichnet. Selbst wenn Sie den lokalen Exchange 2013-Server verwalten, wird die Remoteshell zum Herstellen der Verbindung verwendet. Weitere Informationen zur lokalen und Remoteshell finden Sie unter Verwenden von PowerShell mit Exchange 2013 (Exchange-Verwaltungsshell).

Das Importieren und Exportieren von Dateien auf einen und von einem Exchange-Server in Exchange 2013 unterscheidet sich von diesen Vorgängen in Exchange Server 2007. Der Grund ist der Einsatz von Remoteshell in Exchange 2013. In diesem Thema wird erläutert, warum dieser neue Prozess erforderlich ist und wie Dateien zwischen einem lokalen Server oder Computer und einem Exchange 2013-Server im- und exportiert werden.

Windows PowerShell-Sitzungen

Um zu verstehen, warum Sie eine spezielle Syntax zum Importieren und Exportieren von Dateien in der Remoteshell benötigen, müssen Sie wissen, wie die Shell in Exchange 2013 implementiert ist. Die Shell verwendet Windows PowerShell Sitzungen, d. h. die Umgebungen, in denen Variablen, Cmdlets usw. Informationen freigeben können. Jedes Mal, wenn Sie ein neues Shellfenster öffnen, erstellen Sie eine neue Sitzung. Die Cmdlets, die in jedem Fenster ausgeführt werden, können auf Variablen und andere Informationen zugreifen, die in diesem Fenster gespeichert sind, aber nicht auf Variablen in anderen geöffneten Shellfenstern. Dies liegt daran, dass sie jeweils in ihrer eigenen Windows PowerShell Sitzung enthalten sind. Windows PowerShell Sitzungen können auch als Runspaces bezeichnet werden.

Die Remoteshell in Exchange 2013 weist zwei Sitzungen auf, die lokale Sitzung und die Remotesitzung. Die lokale Sitzung ist die Windows PowerShell-Sitzung, die auf Ihrem lokalen Computer ausgeführt wird. Diese Sitzung enthält alle Cmdlets, die im Lieferumfang von Windows PowerShell enthalten sind. Sie verfügt zudem über Zugriff auf das lokale Dateisystem.

Die Remotesitzung ist die Windows PowerShell-Sitzung, die auf dem Exchange-Remoteserver ausgeführt wird. In dieser Sitzung werden alle Exchange-Cmdlets ausgeführt. Sie hat Zugriff auf das Dateisystem des Exchange-Servers.

Wenn Sie eine Verbindung mit einem Exchange-Remoteserver herstellen, erfolgt eine Verbindung zwischen Ihrer lokalen Sitzung auf Ihrem Computer und der Remotesitzung auf dem Exchange-Server. Diese Verbindung ermöglicht Ihnen die Ausführung von Exchange-Cmdlets auf dem Exchange-Remoteserver in Ihrer lokalen Sitzung, obwohl auf Ihrem lokalen Computer keine Exchange-Cmdlets installiert sind. Auch wenn die Exchange-Cmdlets anscheinend auf Ihrem lokalen Computer ausgeführt werden, werden sie tatsächlich auf dem Exchange-Server ausgeführt.

Wichtig

Selbst wenn Sie die Shell auf einem Exchange 2013-Server öffnen, erfolgt derselbe Verbindungsprozess, und zwei Sitzungen werden eingerichtet. Das heißt, dass Sie dieselbe neue Syntax zum Im- und Exportieren von Dateien verwenden müssen, wenn Sie die Shell auf einem Exchange 2013-Server oder einem Remoteclient-Computer öffnen.

Die Exchange-Cmdlets, die in der Remotesitzung auf dem Exchange-Remoteserver ausgeführt werden, haben keinen Zugriff auf Ihr lokales Dateisystem. Das bedeutet, dass Sie Exchange-Cmdlets im lokalen Datensystem nicht eigenständig zum Im- oder Exportieren von Dateien verwenden können. Weitere Syntax ist erforderlich, um Dateien aus und in das lokale Dateisystem zu übertragen, damit die Exchange-Cmdlets, die auf dem Exchange-Remoteserver ausgeführt werden, die Daten nutzen können. Weitere Informationen zur erforderlichen Syntax finden Sie unter "Im- und Exportieren von Dateien in der Remoteshell" weiter unten in diesem Thema.

Im- und Exportieren von Dateien in der Remoteshell

Das Im- und Exportieren von Dateien erfordert eine besondere Syntax, da Postfach- und Clientzugriffsserver die Remoteshell verwenden und keinen Zugriff auf das Dateisystem des lokalen Computers haben.

Importieren von Dateien in die Remoteshell

Die Syntax zum Importieren von Dateien in Exchange 2013 wird immer dann verwendet, wenn Sie eine Datei von Ihrem lokalen Computer oder Server an ein Cmdlet senden möchten, das auf einem Exchange 2013-Server ausgeführt wird. Cmdlets, die Daten aus einer Datei auf Ihrem lokalen Computer akzeptieren, verfügen über einen Parameter namens FileData (oder etwas Ähnliches). Informationen zum Ermitteln des richtigen Parameters finden Sie in den Hilfeinformationen für das cmdlet, das Sie verwenden.

Die Shell muss wissen, welche Datei Sie an das Exchange 2013-Cmdlet senden und welcher Parameter Daten akzeptiert. Verwenden Sie zu diesem Zweck die folgende Syntax.

<Cmdlet> -FileData ([System.IO.File]::ReadAllBytes('<local path to file>'))

Der folgende Befehl importiert beispielsweise die Datei C:\MyData.dat in den FileData-Parameter des fiktiven Cmdlets Import-SomeData .

Import-SomeData -FileData ([System.IO.File]::ReadAllBytes('C:\MyData.dat'))

Wenn der Befehl ausgeführt wird, werden folgende Aktionen ausgeführt:

  1. Der Befehl wird von der Remoteshell akzeptiert.

  2. RemoteShell wertet den Befehl aus und ermittelt, dass ein eingebetteter Befehl im Wert vorhanden ist, der für den FileData-Parameter bereitgestellt wird.

  3. RemoteShell beendet die Auswertung des Import-SomeData-Befehls und führt den Befehl [System.IO.File]::ReadAllBytes aus. Der Befehl liest die Daten aus der Datei MyData.dat.

  4. RemoteShell speichert die Daten aus dem Befehl [System.IO.File]::ReadAllBytes vorübergehend als Byte[] Objekt, damit sie an das Import-SomeData-Cmdlet übergeben werden können.

  5. Die Ausführung des Befehls Import-SomeData wird fortgesetzt. RemoteShell sendet die Anforderung zum Ausführen des Import-SomeData-Cmdlets an den Exchange 2013-Remoteserver zusammen mit dem vom Befehl [System.IO.File]::ReadAllBytes erstellten Objekt.

  6. Auf dem Exchange 2013-Remoteserver wird das Cmdlet Import-SomeData ausgeführt, und die im temporären Objekt gespeicherten Daten, das vom Befehl [System.IO.File]::ReadAllBytes erstellt wurde, werden an den FileData-Parameter übergeben. Das Cmdlet Import-SomeData verarbeitet die Eingabe und führt die erforderlichen Aktionen aus.

Oder verwenden Sie die folgende alternative Syntax, die dasselbe wie die vorherige Syntax erreicht.

$Data = [System.IO.File]::ReadAllBytes('<local path to file>')
Import-SomeData -FileData $Data

Der gleiche Prozess erfolgt mit dieser alternativen Syntax. Der einzige Unterschied besteht darin, dass die aus der lokalen Datei abgerufenen Daten nicht den gesamten Vorgang gleichzeitig ausführen, sondern in einer Variablen gespeichert werden, auf die nach der Erstellung verwiesen werden kann. Die Variable wird dann im Importbefehl verwendet, um den Inhalt der lokalen Datei an das Import-SomeData-Cmdlet zu übergeben. Die Verwendung dieses zweistufigen Prozesses ist nützlich, wenn Sie die Daten aus der lokalen Datei in mehreren Befehlen verwenden möchten.

Beim Importieren von Dateien müssen einige Einschränkungen berücksichtigt werden. Weitere Informationen finden Sie weiter unten in diesem Thema unter "Einschränkungen für das Importieren von Dateien".

Spezifische Informationen zum Importieren von Daten in Exchange 2013 finden Sie in den Hilfethemen zur Funktion, die Sie verwalten.

Einschränkungen für das Importieren von Dateien

Beim Importieren von Daten in der Remoteshell müssen Grenzwerte festgelegt werden, um die Integrität der übertragenen Daten zu erhalten. Gegenwärtig ausgeführte Übertragungen, die unterbrochen werden, können nicht fortgesetzt werden. Da die übertragenen Daten im Arbeitsspeicher des Remoteservers gespeichert werden, muss der Server gegen Speichererschöpfung aufgrund von extrem großen Datenmengen geschützt werden.

Aus diesen Gründen wird die Datenmenge, die von einem lokalen Computer oder Server an einen Exchange 2013-Remoteserver übertragen wird, auf folgende Größe begrenzt:

  • 500 Megabytes (MB) für jedes Cmdlet, das ausgeführt wird

  • 75 MB für jedes Objekt, das an ein Cmdlet übergeben wird

Wenn diese Grenzwerte überschritten werden, werden die Ausführung des Cmdlets und die verknüpfte Pipeline angehalten, und es wird ein Fehler ausgegeben. Anhand der Beispiele in der folgenden Tabelle soll die Funktionsweise dieser Grenzwerte veranschaulicht werden.

Beispiele für Grenzwerte beim Importieren von Daten

Anzahl von Objekten Objektgröße (MB) Gesamtgröße (MB) Ergebnis des Vorgangs
10 40 400 Der Vorgang wird erfolgreich ausgeführt, da weder die Größe der einzelnen Objekte den Wert 75 MB noch die Gesamtgröße der an das Cmdlet übergebenen Daten den Wert 500 MB übersteigt.
5 80 400 Der Vorgang wird nicht erfolgreich ausgeführt. Wenngleich die Gesamtgröße der an das Cmdlet übergebenen Daten nur 400 MB beträgt, überschreitet die Größe der einzelnen Objekte den Grenzwert von 75 MB.
120 5 600 Der Vorgang wird nicht erfolgreich ausgeführt. Wenngleich die Größe der einzelnen Objekte nur 5 MB beträgt, überschreitet die Gesamtgröße der an das Cmdlet übergebenen Daten den Grenzwert von 500 MB.

Aufgrund der Größenbeschränkung der Datenmenge, die zwischen einem Exchange 2013-Remoteserver und einem lokalen Computer übertragen werden kann, unterstützen nicht alle Cmdlets, die zuvor Importvorgänge unterstützt haben, diese Datenübertragungsmethode. In den Hilfeinformationen zum jeweiligen Cmdlet wird erklärt, ob ein bestimmtes Cmdlet diese Methode unterstützt.

Diese Grenzwerte sollten die Mehrzahl der üblichen Vorgänge abdecken, die auf einem Exchange 2013-Server erfolgen können. Wenn geringere Grenzwerte festgelegt werden, können einige normale Vorgänge möglicherweise nicht erfolgreich ausgeführt werden, da sie die neuen Grenzwerte überschreiten. Wenn höhere Grenzwerte festgelegt werden, kann die Übertragung der Daten länger dauern, und das Risiko vorübergehender Zustände wird erhöht, die zu einer Unterbrechung der Datenübertragung führen. Zudem kann auf dem Remoteserver eine Speichererschöpfung auftreten, wenn keine ausreichende Arbeitsspeicherkapazität verfügbar ist, um während der Datenübertragung den gesamten Datenblock zu speichern. Da diese Situationen zu Datenverlust führen können, sollten die Grenzwerte nicht geändert werden.

Exportieren von Dateien in der Remoteshell

Die Syntax zum Exportieren von Dateien in Exchange 2013 wird immer verwendet, wenn Sie Daten von einem Cmdlet akzeptieren möchten, das auf einem Exchange 2013-Remoteserver ausgeführt wird, und die Daten auf Ihrem lokalen Computer oder Server speichern möchten. Cmdlets, die Daten bereitstellen, die Sie in einer lokalen Datei speichern können, geben ein Objekt aus, das die FileData-Eigenschaft (oder ähnliches) enthält. Abhängig vom Cmdlet wird die FileData-Eigenschaft nur für das Objekt aufgefüllt, das in bestimmten Situationen ausgegeben wird. Informationen zur Bestimmung der richtigen Eigenschaft und deren Verwendung finden Sie in den Hilfeinformationen für das cmdlet, das Sie verwenden.

Die Shell muss wissen, dass Sie die in der Eigenschaft FileData gespeicherten Daten auf Ihrem lokalen Computer speichern möchten. Verwenden Sie zu diesem Zweck die folgende Syntax.

$Variable = <cmdlet>
[System.IO.File]::WriteAllBytes('<local path to file>', $Variable.FileData)

Über den folgenden Befehl werden die in der Eigenschaft FileData gespeicherten Daten für das Objekt exportiert, das über das fiktionale Cmdlet Export-SomeData erstellt wurde. Die exportierten Daten werden in einer von Ihnen angegebenen Datei auf dem lokalen Computer gespeichert, in diesem Fall MyData.dat.

$Data = Export-SomeData
[System.IO.File]::WriteAllBytes('C:\MyData.dat', $Data.FileData)

Wenn der Befehl ausgeführt wird, werden folgende Aktionen ausgeführt:

  1. Der Befehl wird von der Remoteshell akzeptiert.

  2. Remoteshell ruft das Cmdlet Export-SomeData auf dem Exchange 2013-Remoteserver auf und speichert die Ergebnisse lokal in der variablen $Data.

  3. Der Befehl [System.IO.File]::WriteAllBytes liest die in der FileData-Eigenschaft enthaltenen Daten.

  4. Der Befehl [System.IO.File]::WriteAllBytes speichert die Daten aus der FileData-Eigenschaft in der Datei MyData.dat im lokalen Dateisystem.

Spezifische Informationen zum Exportieren von Daten aus Exchange 2013 finden Sie in den Hilfethemen zur Funktion, die Sie verwalten.