Sie sind auf Seite 1von 9

THEMA

about_Arithmetic_Operators
KURZBESCHREIBUNG
Beschreibt die Operatoren, mit denen in Windows PowerShell
arithmetische Operationen ausgefhrt werden.
DETAILBESCHREIBUNG
Mit arithmetischen Operatoren werden numerische Werte berechnet.
Mit einem oder mehreren arithmetischen Operatoren knnen Sie
Werte addieren, subtrahieren, multiplizieren und dividieren sowie
den Rest (Modulo) eines Divisionsvorgangs berechnen.
Auerdem knnen der Additionsoperator (+) und der Multiplikations-
operator (*) auch fr Zeichenfolgen, Arrays und Hashtabellen
verwendet werden. Durch den Additionsoperator werden Eingaben
verkettet. Der Multiplikationsoperator gibt mehrere Kopien der
Eingabe zurck. Es ist sogar mglich, 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 untersttzt:
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
fhrt die angegebene Anzahl "w" * 3
von Kopiervorgngen fr
Zeichenfolgen und Arrays aus.

/ Dividiert zwei Werte. 6/2
% Gibt den Rest eines 7%2
Divisionsvorgangs zurck.

OPERATORRANGFOLGE
Windows PowerShell verarbeitet arithmetische Operatoren in der
folgenden Reihenfolge:
Klammern ()
- (fr eine negative Zahl)
*, /, %
+, - (fr eine Subtraktion)
Entsprechend diesen Rangfolgeregeln werden die Ausdrcke 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 Ausdrcken in Windows PowerShell
unterscheidet sich mglicherweise 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
gendert. 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 knnen Zahlen, Zeichenfolgen, Arrays und Hashtabellen
addieren. Zahlen, Zeichenfolgen und Arrays knnen auch
multipliziert werden. Hashtabellen knnen 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 enthlt. Beim Verketten von
Hashtabellen mit demselben Schlssel tritt ein Fehler auf.
Mit den folgenden Befehlen werden z. B. zwei Arrays erstellt und
anschlieend 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 knnen auch fr andere Objekttypen
ausgefhrt werden. Der von Windows PowerShell ausgefhrte 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 ausgefhrt, 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 Vorgngen 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 fr Anweisungen durch das uerste
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 mglich. Darber hinaus knnen Sie eine Hashtabelle und
ein Array addieren. Es ist jedoch nicht mglich, 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 knnen. 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 Schlssel nicht addiert werden knnen:
C:\PS> $hash1 = @{a=1; b=2; c=3}
C:\PS> $hash2 = @{c="red"}
C:\PS> $hash1 + $hash2
Ungltiges Argument fr Operator '+': Element wurde bereits
hinzugefgt. Schlssel in Wrterbuch: 'c' Hinzugefgter
Schlssel: 'c'.
Bei Zeile:1 Zeichen:9
+ $hash1 + <<<< $hash2

Obwohl die Additionsoperatoren sehr ntzlich sind, empfiehlt es sich,
Hashtabellen und Arrays mithilfe von Zuweisungsoperatoren Elemente
hinzuzufgen. Weitere Informationen finden Sie unter "about_assignment
_operators". In den folgenden Beispielen werden Elemente mithilfe des
+ =-Zuweisungsoperators einem Array hinzugefgt:
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 whlt automatisch den numerischen .NET
Framework-Typ aus, der das Ergebnis am besten ausdrckt, ohne
dass die Genauigkeit beeintrchtigt 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 fr 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 fr 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 fr 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 fr einen Decimal zu gro oder zu klein.
Bei Zeile:1 Zeichen:22
+ [Decimal]::maxvalue + <<<< 1
ARITHMETISCHE OPERATOREN UND VARIABLEN
Sie knnen 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 Ausdrcken mit Zahlen,
Zeichenfolgen und Arrays verwendet. Sie knnen jedoch arithmetische
Operatoren auch mit Objekten verwenden, die von Befehlen
zurckgegeben werden, sowie mit den Eigenschaften dieser Objekte.
In den folgenden Beispielen wird veranschaulicht, wie
arithmetische Operatoren in Ausdrcken 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