about_Operator_Precedence

Letzte Aktualisierung: Mai 2014

Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

THEMA

about_Operator_Precedence

KURZE BESCHREIBUNG

Listet die Windows PowerShell-Operatoren in ihrer Rangfolge auf.

[Dieses Thema ist ein Beitrag von Kirk Munro, einem Windows PowerShell-MVP aus Ottawa, Ontario, Kanada.]

LANGE BESCHREIBUNG

Mithilfe von Windows PowerShell-Operatoren können Sie einfache, aber leistungsstarke Ausdrücke erstellen. Dieses Thema listet die Operatoren in ihrer Rangfolge auf. Die Rangfolge ist die Reihenfolge, in der die Operatoren von Windows PowerShell ausgewertet werden, wenn mehrere Operatoren im gleichen Ausdruck vorkommen.

Wenn Operatoren einen gleiche Rang haben, werden sie von Windows PowerShell von links nach rechts ausgewertet. Ausnahmen sind die Zuweisungsoperatoren, die Umwandlungsoperatoren und die Negationsoperatoren (!, -not -bnot), die von rechts nach links ausgewertet werden.

Sie können Einschlüsse verwenden, z. B. Klammern, um die standardmäßige Rangfolge zu überschreiben und Windows PowerShell dazu zu zwingen, den eingeschlossenen Teil des Ausdrucks vor einem nicht eingeschlossenen Teil auszuwerten.

In der folgenden Liste sind die Operatoren in der Reihenfolge aufgeführt, in der sie ausgewertet werden. Operatoren in der gleichen Zeile oder in der gleichen Gruppe haben denselben Rang.

In der Operator-Spalte sind die Operatoren aufgelistet. In der Reference-Spaltenlisten ist das Windows PowerShell-Hilfethema aufgelistet, in dem der Operator beschrieben wird. Um das Thema anzuzeigen, geben Sie „get-help <topic-name>“ ein.

    OPERATOR                         REFERENCE 
    --------                         ---------

    $()  @()                         about_Operators

    . (dereference) :: (static)      about_Operators

    [0] (index operator)             about_Operators

    [int] (cast operators)           about_Operators
 
    -split (unary) -join (unary)     about_Split, about_Join

    , (comma operator)               about_Operators

    ++ --                            about_Assignment_Operators
 
    -not ! -bNot                     about_Logical_Operators, about_Comparison_Operators

    .. (range operator)              about_Operators
   
    -f (format operator)             about_Operators 
   
    * / %                            about_Arithmetic_Operators
 
    + -                              about_Arithmetic_Operators

In der folgenden Gruppe von Operatoren haben alle Operatoren denselben Rang. Ihre Varianten mit Beachtung von Groß- und Kleinschreibung und ihre Varianten mit expliziter Nichtbeachtung von Groß- und Kleinschreibung haben denselben Rang.

    -split (binary)                  about_Split
    -join (binary)                   about_Join
    -is  -isnot  -as                 about_Type_Operators
    -eq  -ne  -gt  -gt  -lt  -le     about_Comparison_Operators
    -like  -notlike                  about_comparison_operators
    -match  -notmatch                about_comparison_operators
    -in -notIn                       about_comparison_operators
    -contains -notContains           about_comparison_operators
    -replace                         about_comparison_operators

Die Liste wird hier mit den folgenden Operatoren in der Rangfolge fortgesetzt:

    -band -bor -bxor                 about_Comparison_Operators

    -and -or -xor                    about_Comparison_Operators

    . (dot-source)  & (call)         about_Scopes, about_Operators

    | (pipeline operator)            about_Operators

    >  >>  2>  2>>  2>&1             about_Redirection

    =  +=  -=  *=  /= %=             about_Assignment_Operators

BEISPIELE

Die folgenden beiden Befehle zeigen die arithmetischen Operatoren und die Auswirkung der Verwendung von Klammern, um Windows PowerShell dazu zu zwingen, den eingeschlossenen Teil des Ausdrucks zuerst auszuwerten.

        C:\PS> 2 + 3 * 4
        14
        
        C:\PS> (2 + 3) * 4
        20

Das folgende Beispiel ruft die schreibgeschützten Textdateien aus dem lokalen Verzeichnis ab und speichert sie in der $read_only-Variablen.

        $read_only = get-childitem *.txt | where-object {$_.isReadOnly}

Dies entspricht dem folgenden Beispiel.

        $read_only = ( get-childitem *.txt | where-object {$_.isReadOnly} )

Da der Pipeline-Operator (|) einen höheren Rang hat als der Zuweisungsoperator (=), werden die Dateien, die das Get-ChildItem-Cmdlet abruft, an das Where-Object-Cmdlet zum Filtern gesendet, bevor sie der $read_only-Variablen zugewiesen werden.

Das folgende Beispiel zeigt, dass der Index-Operator Vorrang vor dem Umwandlungsoperator hat. Der erste Ausdruck erstellt ein Array aus drei Zeichenfolgen. Anschließend verwendet er den Index-Operator mit einem Wert von 0, um das erste Objekt in dem Array auszuwählen, was die erste Zeichenfolge ist. Schließlich wandelt es das ausgewählte Objekt als Zeichenfolge um. In diesem Fall ist die Umwandlung wirkungslos.

        C:\PS> [string]@('Windows','PowerShell','2.0')[0]
        Windows

Der zweite Ausdruck verwendet Klammern, um zu erzwingen, dass der Umwandlungsvorgang vor der Index-Auswahl erfolgt. Daher wird das gesamte Array als eine (einzelne) Zeichenfolge umgewandelt. Dann wählt der Index-Operator das erste Element in dem Zeichenfolgen-Array aus, was das erste Zeichen ist.

        C:\PS> ([string]@('Windows','PowerShell','2.0'))[0]
        W

Im folgenden Beispiel führt der Ausdruck, da der Operator -gt (größer als) einen höheren Rang hat als der Operator -and (logisches UND), zum Ergebnis FALSE.

        C:\PS> 2 -gt 4 -and 1
        False 

Dies entspricht dem folgenden Ausdruck.

        C:\PS> (2 -gt 4) -and 1
        False 

Hätte der -and einen höheren Rang, würde die Antwort TRUE lauten.

        C:\PS> 2 -gt (4 -and 1)
        True 

Dieses Beispiel veranschaulicht jedoch ein wichtiges Prinzip beim Umgang mit der Rangfolge der Operatoren. Wenn ein Ausdruck für Menschen schwer zu interpretieren ist, verwenden Sie Klammern, um die Reihenfolge der Auswertung zu erzwingen, selbst wenn dadurch die Standard-Operatorrangfolge erzwungen wird. Die Klammern verdeutlichen Ihre Absicht gegenüber Personen, die Ihre Skripts lesen und pflegen.

SIEHE AUCH

about_Assignment_Operators

about_Comparison_Operators

about_Join

about_Logical_Operators

about_Operators

about_Redirection

about_Scopes

about_Split

about_Type_Operators