Grundlegendes zum Import und Export von Dateien in der Exchange-Verwaltungsshell

Gilt für: Exchange Server 2010

Letztes Änderungsdatum des Themas: 2009-12-02

Microsoft Exchange Server 2010 verwendet die Remotingfunktion der Windows PowerShell-Befehlszeilenschnittstelle, um eine Verbindung zwischen dem Server oder der Arbeitsstation, über den bzw. die Sie Exchange verwalten, und dem zu verwaltenden Exchange 2010-Server herzustellen. In Exchange 2010 wird diese Schnittstelle als Exchange-Remoteverwaltungsshell oder Remoteshell bezeichnet. Die Remoteshell wird auch dann für die Verbindungsherstellung verwendet, wenn Sie den lokalen Exchange 2010-Server verwalten. Weitere Informationen zur lokalen Shell und zur Remoteshell finden Sie unter Übersicht über die Exchange-Verwaltungsshell.

Das Verfahren zum Importieren und Exportieren von Dateien auf einem Exchange-Server wurde aufgrund der Implementierung der Remoteshell in Exchange 2010 geändert. In diesem Thema wird erläutert, weshalb dieses neue Verfahren erforderlich ist und wie Dateien zwischen einem lokalen Server oder einer lokalen Arbeitsstation und einem Exchange 2010-Remoteserver importiert und exportiert werden. 

Windows PowerShell-Sitzungen

Um zu verstehen, weshalb zum Importieren und Exportieren von Dateien in der Remoteshell eine spezielle Syntax benötigt wird, müssen Sie wissen, wie die Shell in Exchange 2010 implementiert ist. Die Shell verwendet Windows PowerShell-Sitzungen, bei denen es sich um die Umgebungen handelt, in denen Variablen, Cmdlets usw. Informationen gemeinsam nutzen können. Bei jedem Öffnen eines neuen Shellfensters wird eine neue Sitzung erstellt. Die in den verschiedenen Fenstern ausgeführten Cmdlets können auf Variablen und andere Informationen zugreifen, die in diesen Fenstern gespeichert sind. Ein Zugriff auf Variablen in anderen offenen Shellfenstern ist jedoch nicht möglich. Der Grund dafür ist, dass sie sich in ihren eigenen Windows PowerShell-Sitzungen befinden. Windows PowerShell-Sitzungen können auch als Runspaces bezeichnet werden.

Die Remoteshell in Exchange 2010 verfügt über zwei Sitzungen, 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 verfügt über Zugriff auf das Dateisystem des Exchange-Servers.

Wenn Sie eine Verbindung mit einem Exchange-Remoteserver herstellen, wird eine Verbindung zwischen Ihrer lokalen Sitzung und der Remotesitzung auf dem Exchange-Server hergestellt. Über diese Verbindung können Sie Exchange-Cmdlets auf dem Exchange-Remoteserver in Ihrer lokalen Sitzung ausführen, obwohl auf Ihrem lokalen Computer keine Exchange-Cmdlets installiert sind.

Wichtig

Dieser Verbindungs- und Erstellungsvorgang von zwei Sitzungen findet auch dann statt, wenn Sie die Shell auf einem Exchange 2010-Server öffnen. Das bedeutet, dass Sie die neue Syntax zum Importieren und Exportieren von Dateien unabhängig davon verwenden müssen, ob Sie die Shell auf einem Exchange 2010-Server oder auf einer Remoteclientarbeitsstation öffnen.

Die in der Remotesitzung auf dem Exchange-Remoteserver ausgeführten Exchange-Cmdlets können nicht auf Ihr lokales Dateisystem zugreifen. Daher können Sie Exchange-Cmdlets allein nicht zum Importieren oder Exportieren von Dateien in Ihr lokales Dateisystem bzw. aus Ihrem lokalen Dateisystem verwenden. Damit die Exchange-Cmdlets auf dem Exchange-Remoteserver die Daten verwenden können, muss für die Übermittlung der Dateien zwischen Ihrem lokalen Dateisystem und dem Server zusätzliche Syntax verwendet werden. Weitere Informationen zur erforderlichen Syntax finden Sie unter "Importieren und Exportieren von Dateien in der Remoteshell" weiter unten in diesem Thema.

Hinweis

Für den Import und Export von Dateien auf Edge-Transport-Servern ist keine spezielle Syntax erforderlich. Weitere Informationen zur Edge-Transport-Serverrolle finden Sie unter "Importieren und Exportieren von Dateien auf Edge-Transport-Servern" weiter unten in diesem Thema.

Importieren und Exportieren von Dateien in der Remoteshell

Die Remoteshell wird in den Postfach-, Hub-Transport-, Unified Messaging- und Clientzugriffs-Serverrollen in Exchange 2010 verwendet. Für den Import und Export von Dateien ist eine bestimmte Syntax erforderlich, da für diese Vorgänge die Remoteshell verwendet wird. Die Edge-Transport-Serverrolle verwendet die lokale Shell und eine andere Syntax. Weitere Informationen zur Edge-Transport-Serverrolle finden Sie unter "Importieren und Exportieren von Dateien auf Edge-Transport-Servern" weiter unten in diesem Thema.

Importieren von Dateien in der Remoteshell

Die Syntax für den Import von Dateien in Exchange 2010 wird immer dann verwendet, wenn Sie eine Datei von Ihrem lokalen Computer oder Server an ein Cmdlet senden möchten, das auf einem Exchange 2010-Server ausgeführt wird. Cmdlets, die Daten aus einer Datei auf Ihrem lokalen Computer akzeptieren, verfügen über einen Parameter mit dem Namen FileData (oder einem ähnlichen Namen). In den Hilfeinformationen für das verwendete Cmdlet erfahren Sie, welcher Parameter verwendet werden muss.

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

<Cmdlet> -FileData ([Byte[]]$(Get-Content -Path <local path to file> -Encoding Byte -ReadCount 0))

Über den folgenden Befehl wird z. B. die Datei C:\MyData.dat in den Parameter FileData des fiktionalen Cmdlets Import-SomeData importiert.

Import-SomeData -FileData (Byte[]]$(Get-Content -Path "C:\MyData.dat" -Encoding Byte -ReadCount 0))

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

  1. Der Befehl wird von der Remoteshell akzeptiert.
  2. Die Remoteshell wertet den Befehl aus und ermittelt, dass der für den Parameter FileData bereitgestellte Wert einen eingebetteten Befehl enthält.
  3. Die Remoteshell beendet die Auswertung des Befehls Import-SomeData und führt den Befehl Get-Content aus. Der Befehl Get-Content liest die Daten aus der Datei MyData.dat.
  4. Die Remoteshell speichert die Daten aus dem Befehl Get-Content vorübergehend als Byte[]-Objekt, sodass sie an das Cmdlet Import-SomeData übergeben werden können.
  5. Die Ausführung des Befehls Import-SomeData wird fortgesetzt. Die Remoteshell sendet die Anforderung zur Ausführung des Cmdlets Import-SomeData sowie das über das Cmdlet Get-Content erstellte Objekt an den Exchange 2010-Remoteserver.
  6. Auf dem Exchange 2010-Remoteserver wird das Cmdlet Import-SomeData ausgeführt, und die Daten im temporären Objekt, das über das Cmdlet Get-Content erstellt wurde, werden an den Parameter FileData übergeben. Das Cmdlet Import-SomeData verarbeitet die Eingabe und führt die erforderlichen Aktionen aus.

Einige Cmdlets verwenden die folgende alternative Syntax, mit der dieselben Aktionen ausgeführt werden wie bei Verwendung der vorhergehenden Syntax.

[Byte[]]$Data = Get-Content -Path <local path to file> -Encoding Byte -ReadCount 0
Import-SomeData -FileData $Data

Mit dieser alternativen Syntax wird derselbe Vorgang ausgeführt. Der einzige Unterschied besteht darin, dass nicht umgehend der gesamte Vorgang ausgeführt wird. Die aus der lokalen Datei abgerufenen Daten werden in einer Variablen gespeichert, die nach der Erstellung referenziert werden kann. Die Variable wird anschließend im Importbefehl verwendet, um die Inhalte der lokalen Datei an das Cmdlet Import-SomeData zu übergeben. Dieser zwei Schritte umfassende Vorgang 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 beim Importieren von Dateien".

Spezifische Informationen zum Importieren von Daten in Exchange 2010 finden Sie in den Hilfethemen zur verwalteten Funktion.

Einschränkungen beim 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.

Daher gelten für die Größe der Daten, die von einem lokalen Computer oder Server an einen Exchange 2010-Remoteserver übertragen werden, folgende Grenzwerte:

  • 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 geltenden Größenbeschränkungen für Daten, die zwischen einem Exchange 2010-Remoteserver und einem lokalen Computer übertragen werden, wird diese Datenübertragungsmethode nicht von allen Cmdlets unterstützt, die den Import zuvor unterstützt haben. Hinweise zur Unterstützung dieser Methode durch ein bestimmtes Cmdlet finden Sie in den Hilfeinformationen für das jeweilige Cmdlet.

Diese Einschränkungen sollten für den Großteil an typischen Vorgängen geeignet sein, die auf einem Exchange 2010-Server ausgeführt werden 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 2010 wird verwendet, wenn Sie Daten von einem Cmdlet, das auf einem Exchange 2010-Remoteserver ausgeführt wird, akzeptieren und auf Ihrem lokalen Computer oder Server speichern möchten. Cmdlets, die Daten bereitstellen, die in einer lokalen Datei gespeichert werden können, geben ein Objekt mit der Eigenschaft FileData (oder einer ähnlichen Eigenschaft) aus. Abhängig vom Cmdlet wird die Eigenschaft FileData nur für das Objekt gefüllt, das in spezifischen Situationen ausgegeben wird. In den Hilfeinformationen für das verwendete Cmdlet erfahren Sie, welche Eigenschaft und wann diese Eigenschaft verwendet werden muss.

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.

<cmdlet> | ForEach { $_.FileData | Add-Content <local path to file> -Encoding Byte }

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

Hinweis

Für dieses Verfahren werden das Cmdlet ForEach, Objekte und das Pipelining verwendet. Weitere Informationen zu diesen Elementen bzw. zu dieser Technik finden Sie unter den folgenden Themen:
Pipelining
Strukturierte Daten

Export-SomeData | ForEach { $_.FileData | Add-Content C:\MyData.dat -Encoding Byte }

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

  1. Der Befehl wird von der Remoteshell akzeptiert.
  2. Die Remoteshell ruft das Cmdlet Export-SomeData auf dem Exchange 2010-Remoteserver auf.
  3. Das vom Cmdlet Export-SomeData erstellte Ausgabeobjekt wird über die Pipeline erneut an die lokale Shellsitzung übergeben.
  4. Das Ausgabeobjekt wird dann mittels Pipe an das Cmdlet ForEach übergeben, das über einen Skriptblock verfügt.
  5. Innerhalb des Skriptblocks wird auf die Eigenschaft FileData für das aktuelle Objekt in der Pipeline zugegriffen. Die in der Eigenschaft FileData enthaltenen Daten werden mittels Pipe an das Cmdlet Add-Content übergeben.
  6. Das Cmdlet Add-Content speichert die mittels Pipe aus der Eigenschaft FileData übergebenen Daten in der Datei MyData.dat im lokalen Dateisystem.

Spezifische Informationen zum Exportieren von Daten in Exchange 2010 finden Sie in den Hilfethemen zur verwalteten Funktion.

Importieren und Exportieren von Dateien auf Edge-Transport-Servern

Die Edge-Transport-Serverrolle verwendet nicht wie die anderen Exchange 2010-Serverrollen die Remoteshell. Sie verwendet die lokale Shell. Der Grund dafür ist, dass die Remoteshell für eine ordnungsgemäße Funktionsweise Active Directory und die rollenbasierte Zugriffssteuerung (Role Based Access Control, RBAC) erfordert. Die Edge-Transport-Serverrolle verwendet Active Directory Lightweight Directory Services (AD LDS).

Da die Edge-Transport-Serverrolle die Remoteshell nicht verwendet, findet der neue Vorgang für das Importieren und Exportieren von Dateien in diesem Fall keine Anwendung. Cmdlets, die auf Edge-Transport-Servern ausgeführt werden, können Dateien direkt akzeptieren, ohne dass eine zusätzliche Syntax benötigt wird. In den Hilfeinformationen für das verwendete Cmdlet erfahren Sie, welche Syntax für das Importieren und Exportieren von Dateien auf Edge-Transport-Servern verwendet werden muss.