THEMA
    about_Arithmetic_Operators

KURZBESCHREIBUNG
    Beschreibt die Operatoren, mit denen in Windows PowerShell 
    arithmetische Operationen ausgeführt werden.

DETAILBESCHREIBUNG

    Mit arithmetischen Operatoren werden numerische Werte berechnet. 
    Mit einem oder mehreren arithmetischen Operatoren können Sie 
    Werte addieren, subtrahieren, multiplizieren und dividieren sowie 
    den Rest (Modulo) eines Divisionsvorgangs berechnen.

    Außerdem können der Additionsoperator (+) und der Multiplikations-
    operator (*) auch für Zeichenfolgen, Arrays und Hashtabellen 
    verwendet werden. Durch den Additionsoperator werden Eingaben 
    verkettet. Der Multiplikationsoperator gibt mehrere Kopien der 
    Eingabe zurück. Es ist sogar möglich, Objekttypen in einer 
    arithmetischen Anweisung zu kombinieren.
    Die Methode zum Auswerten der Anweisung wird durch den Typ des 
    Objekts bestimmt, das im Ausdruck am weitesten links steht.

    In Windows PowerShell werden die folgenden arithmetischen 
    Operatoren unterstützt:


    Operator  Beschreibung                             Beispiel
    --------  -----------                             -------
    +         Addiert ganze Zahlen und		      6+2  
              verkettet Zeichenfolgen, 		      "Datei" + "Name"
              Arrays und Hashtabellen.   

    -         Subtrahiert einen Wert von 	      6-2 
              einem anderen Wert.       	      (get-date).date - 1
               
    -         Wandelt eine Zahl in eine		      -6+2
              negative Zahl um.       
                                                      -4
    *         Multipliziert ganze Zahlen und 	      6*2
              führt die angegebene Anzahl 	      "w" * 3
              von Kopiervorgängen für 
              Zeichenfolgen und Arrays aus. 
                   
    /         Dividiert zwei Werte.                   6/2


    %         Gibt den Rest eines    		      7%2
              Divisionsvorgangs zurück. 
 

    OPERATORRANGFOLGE
    Windows PowerShell verarbeitet arithmetische Operatoren in der 
    folgenden Reihenfolge:

        Klammern ()
        - (für eine negative Zahl)
        *, /, %
        +, - (für eine Subtraktion)


    Entsprechend diesen Rangfolgeregeln werden die Ausdrücke von 
    Windows PowerShell von links nach rechts verarbeitet. In den 
    folgenden Beispielen werden die Auswirkungen der Rangfolgeregeln 
    veranschaulicht: 

        C:\PS> 3+6/3*4 
        11

        C:\PS> 10+4/2
        12

        C:\PS> (10+4)/2
        7

        C:\PS> (3+3)/ (1+1)
        3
 
    Die Auswertungsreihenfolge von Ausdrücken in Windows PowerShell 
    unterscheidet sich möglicherweise von der in anderen Ihnen vertrauten 
    Programmier- und Skriptsprachen. Im folgenden Beispiel wird eine 
    komplizierte Zuweisungsanweisung veranschaulicht.

        C:\PS> $a = 0
        C:\PS> $b = 1,2
        C:\PS> $c = -1,-2
        
        C:\PS> $b[$a] = $c[$a++]
        
        C:\PS> $b
        1
        -1

    In diesem Beispiel wird der Ausdruck $a++ vor $c ausgewertet 
    [$a++]. Durch die Auswertung von $a++ wird der Wert von $a 
    geändert. Die Variable $a in $b[$a] ist gleich 1 und nicht 0, 
    sodass die Anweisung $b[1] einen Wert zuweist und nicht $b[0].



    ADDIEREN UND MULTIPLIZIEREN NICHT NUMERISCHER WERTE
    Sie können Zahlen, Zeichenfolgen, Arrays und Hashtabellen 
    addieren. Zahlen, Zeichenfolgen und Arrays können auch 
    multipliziert werden. Hashtabellen können jedoch nicht 
    multipliziert werden.

    Wenn Sie Zeichenfolgen, Arrays oder Hashtabellen addieren, werden 
    die Elemente verkettet. Beim Verketten von Auflistungen (z. B. 
    Arrays oder Hashtabellen) wird ein neues Objekt erstellt, das die 
    Objekte aus beiden Auflistungen enthält. Beim Verketten von 
    Hashtabellen mit demselben Schlüssel tritt ein Fehler auf.

    Mit den folgenden Befehlen werden z. B. zwei Arrays erstellt und 
    anschließend addiert:


	C:\PS> $a = 1,2,3
	C:\PS> $b = "A","B,"C"
	C:\PS> $a + $b
	1
	2
	3
	A
	B
	C
 

    Arithmetische Operationen können auch für andere Objekttypen 
    ausgeführt werden. Der von Windows PowerShell ausgeführte Vorgang 
    wird vom Microsoft .NET Framework-Typ des Objekts bestimmt, das 
    im Vorgang am weitesten links steht.
    Windows PowerShell versucht, alle Objekte im Vorgang in den .NET 
    Framework-Typ des ersten 
    Objekts zu konvertieren. Wenn die Objekte erfolgreich konvertiert 
    werden, wird der Vorgang ausgeführt, der dem .NET Framework-Typ 
    des ersten Objekts entspricht. Wenn eines der Objekte nicht 
    konvertiert werden kann, tritt ein Fehler auf. 

    Im folgenden Beispiel wird die Verwendung des Additionsoperators 
    und des Multiplikationsoperators in Vorgängen veranschaulicht, in 
    denen verschiedene Objekttypen verarbeitet werden:


        C:\PS> "Datei" + 16
        Datei16

        C:\PS> $array = 1,2,3
        C:\PS> $array + 16
        1
        2
        3
        16

	C:\PS> $array + "Datei"
        1
        2
        3
        Datei

        C:\PS> "Datei" * 3
        DateiDateiDatei
 
    Da die Auswertungsmethode für Anweisungen durch das äußerste 
    linke Objekt bestimmt wird, sind Addition und Multiplikation in 
    Windows PowerShell nicht strikt kommutativ. Der Ausdruck (a + b) ist 
    beispielsweise nicht immer gleich (b + a), und (a * b) ist nicht 
    immer gleich (b * a).

    Dieser Grundsatz wird in den folgenden Beispielen veranschaulicht:

        C:\PS> "Datei" + 2
        Datei2

        C:\PS> 2 + "Datei"
        Der Wert "Datei" kann nicht in den Typ "System.Int32" 
        konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das 
        falsche Format."
        Bei Zeile:1 Zeichen:4
        + 2 + <<<< "Datei"

        C:\PS> "Datei" * 3
        DateiDateiDatei

        C:\PS> 3 * "Datei"
        Der Wert "Datei" kann nicht in den Typ "System.Int32" 
        konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das 
        falsche Format."
        Bei Zeile:1 Zeichen:4
        + 3 * <<<< "Datei"
 

    Hashtabellen sind ein etwas anderer Fall. Bei diesen ist eine 
    Addition möglich. Darüber hinaus können Sie eine Hashtabelle und 
    ein Array addieren. Es ist jedoch nicht möglich, eine Hashtabelle 
    und einen anderen Typ zu addieren. 

    In den folgenden Beispielen wird veranschaulicht, wie 
    Hashtabellen sowie Hashtabellen und andere Objekte addiert werden:


        C:\PS> $hash1 = @{a=1; b=2; c=3}
        C:\PS> $hash2 = @{c1="Server01"; c2="Server02"}
        C:\PS> $hash1 + $hash2

        Name                           Value
        ----                           -----
        c2                             Server02
        a                              1
        b                              2
        c1                             Server01
        c                              3


        C:\PS> $hash1 + 2
        Eine Hashtabelle kann nur zu einer Hashtabelle addiert werden.
        Bei Zeile:1 Zeichen:9
        + $hash1 + <<<< 2


        C:\PS> 2 + $hash1
        "System.Collections.Hashtable" kann nicht in "System.Int32" 
        konvertiert werden.
        Bei Zeile:1 Zeichen:4
        + 2 + <<<< $hash1
 

    In den folgenden Beispielen wird veranschaulicht, dass Sie eine 
    Hashtabelle und ein Array addieren können. Die gesamte 
    Hashtabelle wird als ein einziges Objekt zum Array addiert.


        C:\PS> $array = 1,2,3
        C:\PS> $array + $hash1
        1
        2
        3

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3


        C:\PS> $sum = $array + $hash1
        C:\PS> $sum.count
        4

        C:\PS> $sum[3]
        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3


        PS C:\ps-test> $sum + $hash2
        1
        2
        3

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3
        c2                             Server02 

    Im folgenden Beispiel wird veranschaulicht, dass Hashtabellen mit 
    demselben Schlüssel nicht addiert werden können:

        C:\PS> $hash1 = @{a=1; b=2; c=3}
        C:\PS> $hash2 = @{c="red"}
        C:\PS> $hash1 + $hash2
        Ungültiges Argument für Operator '+': Element wurde bereits 
        hinzugefügt. Schlüssel in Wörterbuch: 'c'  Hinzugefügter 
        Schlüssel: 'c'.
        Bei Zeile:1 Zeichen:9
        + $hash1 + <<<< $hash2
 


    Obwohl die Additionsoperatoren sehr nützlich sind, empfiehlt es sich, 
    Hashtabellen und Arrays mithilfe von Zuweisungsoperatoren Elemente 
    hinzuzufügen. Weitere Informationen finden Sie unter "about_assignment
    _operators". In den folgenden Beispielen werden Elemente mithilfe des 
    + =-Zuweisungsoperators einem Array hinzugefügt:

        C:\PS> $array
        1
        2
        3

        C:\PS> $array + "Datei"
        1
        2
        3
        Datei

        C:\PS> $array
        1
        2
        3

        C:\PS> $array += "Datei"
        C:\PS> $array
        1
        2
        3
        Datei

        C:\PS> $hash1

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        c                              3

        C:\PS> $hash1 += @{e = 5}
        C:\PS> $hash1

        Name                           Value
        ----                           -----
        a                              1
        b                              2
        e                              5
        c                              3
 

    Windows PowerShell wählt automatisch den numerischen .NET 
    Framework-Typ aus, der das Ergebnis am besten ausdrückt, ohne 
    dass die Genauigkeit beeinträchtigt wird. Beispiel:

        C:\PS> 2 + 3.1
        5.1
        C:\PS> (2). GetType().FullName
        System.Int32
        C:\PS> (2 + 3.1).GetType().FullName
        System.Double

    Wenn das Ergebnis eines Vorgangs für den Typ zu groß ist, wird 
    der Typ des Ergebnisses erweitert, sodass das Ergebnis 
    aufgenommen werden kann. Dies wird im folgenden Beispiel 
    veranschaulicht: 

        C:\PS> (512MB).GetType().FullName
        System.Int32
        C:\PS> (512MB * 512MB).GetType().FullName
        System.Double

    Der Typ des Ergebnisses entspricht nicht unbedingt dem Typ eines 
    Operanden. Im folgenden Beispiel kann der negative Wert nicht in 
    eine ganze Zahl ohne Vorzeichen umgewandelt werden, und die ganze 
    Zahl ohne Vorzeichen ist zu groß für eine Umwandlung in Int32:

        C:\PS> ([int32]::minvalue + [uint32]::maxvalue).gettype().fullname
        System.Int64

    In diesem Beispiel kann Int64 beide Typen aufnehmen.

    Der Typ "System.Decimal" stellt eine Ausnahme dar. Wenn einer der 
    Operand den Typ "Decimal" aufweist, weist auch das Ergebnis den 
    Typ "Decimal" auf. Wenn das Ergebnis für den Typ "Decimal" zu 
    groß ist, wird es nicht in "Double" umgewandelt. Stattdessen wird 
    ein Fehler ausgegeben.
    
        C:\PS> [Decimal]::maxvalue
        79228162514264337593543950335
        C:\PS> [Decimal]::maxvalue + 1
        Der Wert war für einen Decimal zu groß oder zu klein.
        Bei Zeile:1 Zeichen:22
        + [Decimal]::maxvalue + <<<< 1


    ARITHMETISCHE OPERATOREN UND VARIABLEN
    Sie können arithmetische Operatoren auch mit Variablen verwenden. Die 
    Operatoren wirken sich auf die Werte der Variablen aus. In den 
    folgenden Beispielen wird die Verwendung arithmetischer Operatoren 
    mit Variablen veranschaulicht:

        C:\PS> $intA = 6 
        C:\PS> $intB = 4 
        C:\PS> $intA + $intB 

        10 


        C:\PS> $a = "Windows " 
        C:\PS> $b = "PowerShell " 
        C:\PS> $c = 2 
	C:\PS> $a + $b + $c

        Windows PowerShell 2 


    ARITHMETISCHE OPERATOREN UND BEFEHLE
    In der Regel werden arithmetische Operatoren in Ausdrücken mit Zahlen, 
    Zeichenfolgen und Arrays verwendet. Sie können jedoch arithmetische 
    Operatoren auch mit Objekten verwenden, die von Befehlen 
    zurückgegeben werden, sowie mit den Eigenschaften dieser Objekte.

    In den folgenden Beispielen wird veranschaulicht, wie 
    arithmetische Operatoren in Ausdrücken mit Windows PowerShell-
    Befehlen verwendet werden:


	C:\PS> get-date
	Mittwoch, 2. Januar  2008 13:28:42


	C:\PS> $day = new-timespan -day 1
	C:\PS> get-date + $day
	Donnerstag, 3. Januar 2008 13:34:52


	C:\PS> get-process | where {($_.ws * 2) -gt 50mb}
	Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
	-------  ------    -----      ----- -----   ------     -- -----------
	   1896      39    50968      30620   264 1,572.55   1104 explorer
	  12802      78   188468      81032   753 3,676.39   5676 OUTLOOK
	    660       9    36168      26956   143    12.20    988 powershell
	    561      14     6592      28144   110 1,010.09    496 services
	   3476      80    34664      26092   234 ...45.69    876 svchost
	    967      30    58804      59496   416   930.97   2508 WINWORD 

BEISPIELE
    In den folgenden Beispielen wird veranschaulicht, wie 
    arithmetische Operatoren in Windows PowerShell verwendet werden:

	C:\PS> 1 + 1
	2 

	C:\PS> 1 - 1 
	0 

	C:\PS> -(6 + 3) 
	-9 

	C:\PS> 6 * 2 
	12 

	C:\PS> 7 / 2 
	3.5 

	C:\PS> 7 % 2 
	1 

	C:\PS> w * 3 
	www 

	C:\PS> 3 * "w" 
	Der Wert "w" kann nicht in den Typ "System.Int32" konvertiert 
	werden. Fehler: "Die Eingabezeichenfolge hat das falsche Format." 
	Bei Zeile:1 Zeichen:4 
	+ 3 * <<<< "w" 

	PS C:\ps-test> "Windows" + " " + "PowerShell" 
	Windows PowerShell 

	PS C:\ps-test> $a = "Windows" + " " + "PowerShell" 
	PS C:\ps-test> $a 
	Windows PowerShell 

	C:\PS> $a[0] 
	W 

	C:\PS> $a = "Testdateien.txt" 
	C:\PS> $b = "C:\Protokolle\" 
	C:\PS> $b + $a 
	C:\Protokolle\Testdateien.txt 

	C:\PS> $a = 1,2,3 
	C:\PS> $a + 4 
	1 
	2 
	3 
	4 

	C:\PS> $servers = @{0 = "LocalHost"; 1 = "Server01"; 2 = "Server02"} 
	C:\PS> $servers + @{3 = "Server03"} 
	Name Value 
	---- ----- 
	3 Server03 
	2 Server02 
	1 Server01 
	0 LocalHost 

	C:\PS> $servers 
	Name Value 
	---- ----- 
	2 Server02 
	1 Server01 
	0 LocalHost 

	C:\PS> $servers += @{3 = "Server03"} #Zuweisungsoperator verwenden 
	C:\PS> $servers 
	Name Value 
	---- ----- 
	3 Server03 
	2 Server02 
	1 Server01 
	0 LocalHost 


SIEHE AUCH
    about_arrays
    about_assignment_operators
    about_comparison_operators
    about_hash_tables
    about_operators
    about_variables
    Get-Date
    New-TimeSpan




Inhaltsverzeichnis