Benutzerdefinierte Variablen

 

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

Letztes Änderungsdatum des Themas: 2006-09-21

Bei einer Variablen handelt es sich um einen Ort zum Speichern von Informationen. Anders als in vielen Programmierumgebungen müssen Sie eine Variable in der Exchange-Verwaltungsshell nicht deklarieren, bevor Sie sie verwenden.

Sie kennzeichnen eine Variable, indem Sie einer Zeichenfolge ein Dollarzeichen voranstellen ($). Wenn die Zeichenfolge Leerzeichen oder Sonderzeichen enthält, müssen Sie sie in geschweifte Klammern ({ }) einschließen. Mithilfe der Arrayreferenznotation ([ ]) können Sie die Elemente einer Array- oder Hashtabellenvariable angeben.

Weitere Informationen zu Arrays finden Sie unter Arrays.

Speichern von Werten mithilfe von Variablen

Variablen sind sehr nützlich, wenn Werte gespeichert werden sollen. Sie können Werten Variablen mithilfe eines Zuweisungsoperators zuweisen. Weitere Informationen zu Operatoren finden Sie unter Syntax.

Wenn Sie beispielsweise den Wert 8 der Variablen $Example zuweisen möchten, verwenden Sie hierfür den folgenden Befehl:

$Example = 8

Dieser Befehl weist die ganze Zahl 8 der Variablen $Example zu. Die Variable $Example können Sie später in einem anderen Befehl aufrufen, um den Wert erneut aufzurufen. Die in einer Variablen angegebenen Werte werden so behandelt, als sei der in der Variablen enthaltene Wert an der Stelle eingegeben worden, an der die Variable angegeben wurde. Beispielsweise entsprechen sich die folgenden beiden Befehle, wenn $Example2 der Wert "Hello" zugewiesen ist:

Write-Host $Example2
Write-Host "Hello"

Speichern der Ausgabe eines Befehls in einer Variablen

Sie können auch die Ausgabe von Befehlen zur späteren Verwendung in einer Variablen speichern. Wenn Sie einer Variablen einen Befehl zuweisen, wird der Befehl bei der Ausführung ausgewertet. Die Ausgabe dieses Befehls wird der Variablen zugewiesen. Wenn Sie beispielsweise $CurrentDate = Get-Date in der Befehlszeile ausführen und anschließend wiederholt mehrere Sekunden lang $CurrentDate aufrufen, wird bei jedem Aufruf der Variablen derselbe Wert gemeldet.

Wenn Sie die Ausgabe eines Befehls einer Variablen zuweisen, können Sie auch auf die Eigenschaften und Methoden des zugrunde liegenden Objekts zugreifen. Um beispielsweise die Eigenschaften und Methoden anzuzeigen, die beim Zuweisen von Get-Date zu $CurrentDate verfügbar sind, können Sie den Befehl $CurrentDate | Get-Member verwenden. Wenn Sie den Befehl $CurrentDate | Get-Member verwenden, werden die folgenden Eigenschaften in einer Liste zurückgegeben:

Date                 Property       System.DateTime Date {get;}
Day                  Property       System.Int32 Day {get;}
DayOfWeek            Property       System.DayOfWeek DayOfWeek {get;}
DayOfYear            Property       System.Int32 DayOfYear {get;}
Hour                 Property       System.Int32 Hour {get;}
Kind                 Property       System.DateTimeKind Kind {get;}
Millisecond          Property       System.Int32 Millisecond {get;}
Minute               Property       System.Int32 Minute {get;}
Month                Property       System.Int32 Month {get;}
Second               Property       System.Int32 Second {get;}
Ticks                Property       System.Int64 Ticks {get;}
TimeOfDay            Property       System.TimeSpan TimeOfDay {get;}
Year                 Property       System.Int32 Year {get;}
DateTime             ScriptProperty System.Object DateTime {get=if ($this.Di...

Diese Eigenschaften können Sie aufrufen, indem Sie die Variable, einen Punkt (.) und anschließend die Eigenschaft eingeben, die angezeigt werden soll. Um beispielsweise das in einer Variable gespeicherte Jahr anzuzeigen, geben Sie den folgenden Befehl ein:

$CurrentDate.Year

Durch den Zugriff auf die Eigenschaften einer Variablen können Sie problemlos die einzelnen in einer Variable gespeicherten Informationselemente ändern und verwenden, ohne dass eine Textanalyse erforderlich ist.

Speichern der Ausgabe des Befehls "Dir" in einer Variablen

Sie haben auch die Möglichkeit, die Ausgabe des Befehls Dir in einer Variablen zu speichern. Da der Befehl Dir mehrere Zeilen zurückgibt, wird jede zurückgegebene Zeile in einer Variablen als neues Arrayelement gespeichert. Sie können dann auf jedes Dateiobjekt zugreifen, dass in dem neu erstellten Array gespeichert ist. Weitere Informationen zu Arrays finden Sie unter Arrays.

Der folgende Befehl weist die Ausgabe des Befehls Dir der Variablen $DirOutput zu:

$DirOutput = Dir

Sie können dann ein bestimmtes Dateiobjekt auswählen, indem Sie wie folgt den gewünschten Arrayindex angeben:

$DirOutput[1].Name

Alternativ können Sie folgendermaßen eine einfache Schleife erstellen, die das gesamte Array durchläuft und den Namen und die Dateigröße jeder in dem Array gespeicherten Datei anzeigt:

0..$DirOutput.Length | ForEach { $DirOutput[$_].Name + " is " + $DirOutput[$_].Length + " bytes long." }

Diese Beispiel wird in der folgenden Liste untersucht:

  • Der Befehl 0..$DirOutput.Length weist die Exchange-Verwaltungsshell an, eine ganze Zahl zwischen 0 und der maximalen Länge des in der Variablen $DirOutput gespeicherten Arrays auszugeben.

  • Die Ausgabe des Befehls 0..$DirOutput.Length wird über eine Pipe an den Befehl ForEach übergeben, der in Form einer Schleife jedes Element des Arrays durchläuft, bis das Endes des Arrays erreicht ist. Der Befehl ForEach führt die in geschweifte Klammern ({ }) gesetzten Befehle aus.

  • Die Variable $_ speichert das aktuelle in der Pipeline enthaltene Objekt. In diesem Fall ist das Objekt in der Pipeline eine ganze Zahl, die von dem Befehl 0..$DirOutput.Length hervorgebracht wird, während von 0 bis zu der maximalen Länge des Arrays gezählt wird. Diese Variable wird in den Befehlen $DirOutput[$_].Name und $DirOutput[$_].Length für die Auswahl des Arrayelements verwendet, auf das zugegriffen werden soll.

  • Weitere Informationen über die $-Variable finden Sie unter Shellvariablen.

  • Mit dem Pluszeichen (+) wird die Ausgabe der Befehle DirOutput[$_].Name und $DirOutput[$_].Length einschließlich der angegebenen Zeichenfolgen verkettet, um eine Ausgabe ähnlich der folgenden zu erzeugen:

    abv_dg.dll is 416144 bytes long.
    addxa.dll is 285056 bytes long.
    ASDat.MSI is 5626880 bytes long.
    ASEntDat.MSI is 5626880 bytes long.
    ASEntIRS.MSI is 910336 bytes long.
    ASEntSig.MSI is 45056 bytes long.
    BPA.Common.dll is 211848 bytes long.
    BPA.ConfigCollector.dll is 101272 bytes long.
    BPA.NetworkCollector.dll is 52128 bytes long.
    

Diese Beispiele zeigen, dass bei mehrmaliger Verwendung der Eigenschaft Length unterschiedliche Informationen über dieselbe Variable angezeigt werden können. Dies ist möglich, da in der Variablen $DirOutput mehrere Datentypen gespeichert werden. Der erste Datentyp ist das Verzeichnisobjekt selbst, während es sich beim zweiten Typ um die in den Dateiobjekten enthaltenen Daten handelt. Wenn Sie den Befehl $DirObject.Length ausführen, ohne einen Arrayindex anzugeben, greifen Sie auf die übergeordneten Objekttypen des Verzeichnisses zu, die in dem Array gespeichert sind. Wird ein Arrayindex angegeben (zum Beispiel $DirObject[5].Length) greifen Sie auf die untergeordneten Dateiobjekte zu, die in dem Verzeichnisobjekt gespeichert sind.

Dieses Verhalten trifft für viele Objekte zu. Sie können in der Regel auf viele Ebenen der Objektdaten zugreifen, die in einer einzigen Variable enthalten sind. Aufgrund der Möglichkeit, auf diese Daten zuzugreifen, ist die Exchange-Verwaltungsshell ausgesprochen flexibel.