Skripterstellung mit der Exchange-Verwaltungsshell

 

Gilt für: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Letztes Änderungsdatum des Themas: 2009-12-18

Für die meisten allgemeinen Aufgaben ist es ausreichend, wenn Cmdlets nacheinander oder zusammen über Pipelines ausgeführt werden. Unter Umständen kann es jedoch sinnvoll sein, die Ausführung von Aufgaben zu automatisieren. Die Exchange-Verwaltungsshell unterstützt eine äußerst umfangreiche Skriptsprache, die auf Microsoft .NET Framework basiert und der Skriptsprache in anderen Shells entspricht. In der Exchange-Verwaltungsshell können Sie sowohl sehr einfache als auch sehr komplexe Skripts erstellen. Sprachkonstrukte für Schleifen-, bedingte, Flusssteuerungs- und Variablenzuweisung werden unterstützt.

In jeder Organisation fallen organisationsspezifische Aufgaben an. Mithilfe einer Bibliothek von Skriptdateien für das Ausführen solcher Aufgaben können Administratoren Zeit sparen und diese Skripts auf jedem Computer ausführen, auf dem die Exchange-Verwaltungsshell installiert ist.

Weitere Informationen zum Verwenden dieser Skripts finden Sie unter Skripting mit der Windows PowerShell. Da die Exchange-Verwaltungsshell auf der Microsoft Windows PowerShell-Technologie aufbaut, gelten die Skriptanleitungen für Windows PowerShell für die Exchange-Verwaltungsshell.

Ausführen eines Skripts in der Exchange-Verwaltungsshell

Benutzer, denen die Cmd.exe-Umgebung vertraut ist, kennen sich mit dem Ausführen von Command Shell-Skripts bereits aus. Dabei handelt es sich lediglich um Textdateien mit der Dateinamenerweiterung BAT. Wie Batchdateien können Sie auch die Skriptdateien der Exchange-Verwaltungsshell mithilfe eines Text-Editors erstellen, z. B. Editor. Für die Skriptdateien der Exchange-Verwaltungsshell wird die Dateinamenerweiterung PS1 verwendet.

Die Exchange-Verwaltungsshell verwendet für Skriptdateien ein Stammverzeichnis, wenn diese aufgerufen werden. Standardmäßig handelt es sich bei dem Stammverzeichnis um das Verzeichnis <root drive>:\Program Files\Microsoft\Exchange Server\bin. Das aktuelle PSHome-Verzeichnis auf den Computern, auf denen die Exchange-Verwaltungsshell ausgeführt wird, können Sie auch durch Ausführen von $PSHome in der Befehlszeile überprüfen. Beide Verzeichnisse befinden sich in der Umgebungsvariablen PATH.

Wenn eine Skriptdatei im Stammverzeichnis gespeichert ist, können Sie sie mit dem Skriptnamen aufrufen. Wenn sich die Skriptdatei nicht im aktuellen Speicherort befindet, müssen der Pfad und der Skriptname verwendet werden. Wenn sich die Skriptdatei im aktuellen Speicherort befindet, muss dem Skriptnamen .\ vorangestellt werden.

Die folgenden Beispiele veranschaulichen die Anforderungen der Befehlssyntax zum Aufrufen von drei verschiedenen Skripts. All diese Beispiele verwenden das Cmdlet Get-Date von drei verschiedenen Speicherorten aus.

[PS] C:\>Get-Date-Script-A.ps1
Friday, January 20, 2006 3:13:01 PM

Die Skriptdatei Get-Date-Script-A.ps1 befindet sich in dem Verzeichnis, das durch $PSHhome angegeben ist. Zum Ausführen ist lediglich der Skriptname erforderlich.

[PS] C:\>c:\workingfolder\Get-Date-Script-B.ps1
Friday, January 20, 2006 3:13:25 PM

Die Skriptdatei Get-Date-Script-B.ps1 befindet sich im Verzeichnis C:\workingfolder, d. h., zum Ausführen muss der vollständige Pfad angegeben werden.

[PS] C:\>.\Get-Date-Script-C.ps1
Friday, January 20, 2006 3:13:40 PM

Die Skriptdatei Get-Date-Script-C.ps1 befindet sich im aktuellen Speicherort, C:\. Daher muss zum Ausführen .\ vorangestellt werden.

[PS] C:\>Get-Date-Script-C.ps1
'Get-Date-Script-C.ps1' is not recognized as a Cmdlet, function, operable program, or script file.
At line:1 char:21
+ Get-Date-Script-C.ps1 <<<<

Im letzten Beispiel werden beim Aufrufen desselben Skripts (Get-Date-Script-C.ps1,) ohne vorangestellten .\ die erwarteten Ergebnisse angezeigt.

Weisen Sie Skriptdateien als bewährte Methode stets einen beschreibenden Namen zu, und fügen Sie dem Skript Kommentare zur Beschreibung des Zwecks und zur Kennzeichnung aller interessanten Aspekte hinzu. Des Weiteren sollten Informationen zum Autor hinzugefügt werden, falls ein Benutzer, der das Skript ausführt, Fragen zur Verwendung hat. Verwenden Sie zum Starten von Kommentarzeilen im Skripttextkörper das Raute-Symbol (#).

Ausführen eines Skripts in "Cmd.exe"

Wenn Sie ein Skript auf Zeitplanbasis vom Windows-Taskplanerdienst ausführen lassen möchten, können Sie die Exchange-Verwaltungsshell aufrufen und das auszuführende Skript als Parameter hinzufügen. Da die Exchange-Verwaltungsshell ein Snap-In von Windows PowerShell ist, müssen Sie auch das Snap-In der Exchange-Verwaltungsshell laden, wenn Sie den Befehl ausführen, um Exchange-bezogene Cmdlets ausführen zu können. Die folgende Syntax ist erforderlich, um das Snap-In der Exchange-Verwaltungsshell laden und das Skript mit dem Cmd.exe-Befehl ausführen zu können:

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Psc1" -Command ". '<Path to Your Script>'"

Verwenden Sie z. B. den folgenden Befehl, um das Skript RetrieveMailboxes.ps1 in C:\My Scripts auszuführen:

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Psc1" -Command ". 'C:\My Scripts\RetrieveMailboxes.ps1'"

Weitere Optionen, die Sie beim Aufrufen der Exchange-Verwaltungsshell in der Cmd.exe-Umgebung verwenden können, werden angezeigt, wenn Sie PowerShell.exe /? eingeben.

Abrufen von Hinweisen in der Exchange-Verwaltungskonsole

In Microsoft Exchange Server 2007 können Sie mithilfe der Exchange-Verwaltungskonsole ausführliche Informationen zu bestimmten Exchange-Verwaltungsshellbefehlen anzeigen, mit denen bestimmte Aufgaben ausgeführt werden. Wenn Sie in der Exchange-Verwaltungskonsole einen Assistenten ausführen, übernimmt der Assistent die eingegebenen Informationen und erstellt einen Exchange-Verwaltungsshellbefehl, der dann vom Computer ausgeführt wird. Diesen Befehl können Sie kopieren und direkt in die Exchange-Verwaltungsshell einfügen oder zum Ändern in einen Text-Editor kopieren. Wenn Sie einmal überprüfen, wie die Exchange-Verwaltungskonsole Befehle erstellt, werden Sie erkennen, wie Sie diese Befehle zur Erfüllung zukünftiger Anforderungen am besten konstruieren oder ändern.

Wenn Sie z. B. ein neues Postfach für den Benutzer mit dem Namen Frank Lee erstellen, werden die folgenden Informationen auf der Seite Fertigstellung des Assistenten für neue Postfächer angezeigt:

Abbildung 1   Assistent für neue Postfächer - Seite "Fertigstellung"

Neues Postfach, Fertigstellung (Seite)

Die Informationen, die auf der Seite Fertigstellung angezeigt werden, geben Ihnen eine Vorstellung von den Informationen, über die Sie verfügen müssen, um sicherstellen zu können, dass ein ähnlicher in der Exchange-Verwaltungsshell ausgeführter Befehl erfolgreich abgeschlossen werden kann. Drücken Sie auf der Seite Fertigstellung STRG+C, um diese Informationen in die Zwischenablage zu kopieren. Überprüfen Sie den Befehl dann in einem Text-Editor, um herauszufinden, welche Änderungen vorgenommen werden müssen, um weitere Postfächer hinzufügen zu können. Sie können den Befehl auch anpassen, sodass er als Teil eines Skripts verwendet werden kann, das eine Datei, in der die Werte durch Kommas getrennt sind (CSV-Datei), oder eine andere Eingabequelle verwendet, um das Erstellen vieler Postfächer zu automatisieren.

Testen von Skripts

Wenn Sie neue Skripts erstellt haben, sollten Sie diese stets in einer Testumgebung testen, bevor Sie sie in der Produktionsumgebung anwenden. Zum Testen von Skripts in der Testumgebung und Bereitstellen in der Produktionsumgebung können Sie den Parameter WhatIf verwenden, der in vielen Cmdlets der Exchange-Verwaltungsshell verfügbar ist, um sicherzustellen, dass das Skript wie erwartet ausgeführt wird. Der Parameter WhatIf weist den Befehl, für den er gilt, an, mit der Ausführung zu beginnen, aber nur die Objekte, die von der Ausführung betroffen sind, sowie die Änderungen anzuzeigen, die an diesen Objekten vorgenommen würden, ohne dass eines dieser Objekte jedoch geändert wird.

Weitere Informationen zum Parameter WhatIf finden Sie unter Parameter "WhatIf", "Confirm" und "ValidateOnly".

Problembehandlung bei Skripts

Es gibt viele Gründe, warum Skripts nicht wie erwartet funktionieren. Dem Problem auf den Grund zu gehen, kann daher u. U. schwierig sein. Die Exchange-Verwaltungsshell unterstützt Sie dabei, allgemeine Syntaxfehler zu lokalisieren, indem sie Zeile und Zeichen am Fehlerpunkt meldet. Wenn die Syntax eines Skripts korrekt, das Verhalten dennoch nicht wie erwartet ist, fällt die Problemdiagnose viel schwieriger aus. Die Exchange-Verwaltungsshell enthält einfache Debugfunktionen, mit denen Probleme mit Skriptdateien behoben werden können. Dazu werden die einzelnen Schritte des Skripts bei der Ausführung überprüft. Diese Funktion wird als "Verfolgung" bezeichnet.

Um die Verfolgung zu aktivieren und die einzelnen Befehlsschritte in einem Skript zu untersuchen, verwenden Sie das Cmdlet Set-PSDebug mit dem auf den Wert 1 festgelegten Parameter Trace. Um jeden Schritt und jede Variablenzuweisung bei der Ausführung zu untersuchen, legen Sie den Parameter Trace auf den Wert 2 fest. Wenn Sie die Verfolgung deaktivieren möchten, legen Sie den Wert des Parameters Trace auf 0 (Null) fest.

Um jeden Befehl in einem Skript Zeile für Zeile zu überprüfen, verwenden Sie das Cmdlet Set-PSDebug mit dem Parameter Step. Bei jedem einzelnen Schritt werden Sie aufgefordert, den Vorgang fortzusetzen. Die folgenden Auswahlmöglichkeiten sind im Step-Modus verfügbar:

[Y] Yes (continue to the next step)
[A] Yes to All (continue to the end of the script)
[N] No (stop this step)
[L] No to All (stop all remaining steps)
[S] Suspend (suspend at this point and drop to a prompt)

Mit Suspend können Sie in eine Eingabeaufforderung wechseln, in der Sie jeden Befehl ausführen können, z. B. um Werte eines Objekts zu überprüfen oder festzulegen, bevor das Skript darauf zugreifen kann. Wenn Sie die Skriptausführung fortsetzen möchten, geben Sie Exit ein. Daraufhin kehrt die Steuerung direkt zu der Stelle zurück, an der das Skript angehalten wurde.