RUBRIQUE
about_Arithmetic_Operators
DESCRIPTION COURTE
Décrit les opérateurs qui exécutent des opérations arithmétiques
dans Windows PowerShell.
DESCRIPTION LONGUE
Les opérateurs arithmétiques calculent des valeurs numériques.
Vous pouvez utiliser un ou plusieurs opérateurs arithmétiques
pour ajouter, soustraire, multiplier et diviser des valeurs,
ou bien calculer le reste (modulo) d'une division.
De plus, l'opérateur d'addition (+) et l'opérateur de
multiplication (*) s'appliquent également aux chaînes, aux
tableaux et aux tables de hachage. L'opérateur d'addition
concatène l'entrée. L'opérateur de multiplication retourne
plusieurs copies de l'entrée. Vous pouvez même combiner des
types d'objets dans une instruction arithmétique.
La méthode utilisée pour évaluer l'instruction est déterminée
par le type de l'objet situé le plus à gauche dans l'expression.
Windows PowerShell prend en charge les opérateurs arithmétiques
suivants :
Opérateur Description Exemple
-------- ----------- -------
+ Ajoute des entiers, ou concatène 6+2
des chaînes, des ableaux et des "fichier" + "nom"
tables tde hachage.
- Soustrait une valeur d'une 6-2
autre valeur. (get-date).date - 1
- Convertit un nombre en nombre négatif. -6+2
-4
* Multiplie des entiers, ou copie des 6*2
chaînes et des tableaux le nombre "w" * 3
de fois spécifié.
/ Divise deux valeurs. 6/2
% Retourne le reste d'une division. 7%2
PRÉCÉDENCE DES OPÉRATEURS
Windows PowerShell traite les opérateurs arithmétiques dans
l'ordre suivant :
Parenthèses ()
- (pour un nombre négatif)
*, /, %
+, - (pour la soustraction)
Windows PowerShell traite les expressions de gauche à droite en
respectant les règles de précédence. Les exemples suivants montrent
l'effet des règles de précédence :
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
L'ordre dans lequel Windows PowerShell évalue les expressions
peut être différent de celui d'autres langages de programmation
et de script que vous avez utilisés. L'exemple suivant présente
une instruction d'affectation complexe.
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
Dans cet exemple, l'expression $a++ est évaluée avant $c[$a++].
L'évaluation de l'expression $a++ modifie la valeur de $a. La
variable $a de $b[$a] étant égale à 1, et non pas à 0,
l'instruction attribue une valeur à $b[1], et non pas à $b[0].
AJOUT ET MULTIPLICATION DE TYPES NON NUMÉRIQUES
Vous pouvez ajouter des nombres, des chaînes, des tableaux et des
tables de hachage. Vous avez également la possibilité de multiplier
des nombres, des chaînes et des tableaux. Toutefois, vous ne pouvez
pas multiplier les tables de hachage.
Lorsque vous ajoutez des chaînes, des tableaux ou des tables de
hachage, les éléments sont concaténés. Lorsque vous concaténez
des collections, telles que des tableaux ou des tables de hachage,
un objet contenant les objets des deux collections est créé.
Si vous tentez de concaténer des tables de hachage ayant la
même clé, l'opération échoue.
Par exemple, les commandes suivantes créent deux tableaux, puis
les ajoutent :
C:\PS> $a = 1,2,3
C:\PS> $b = "A","B,"C"
C:\PS> $a + $b
1
2
3
A
B
C
Vous pouvez également exécuter des opérations arithmétiques sur
des objets de types différents. L'opération exécutée par Windows
PowerShell est déterminée par le type Microsoft .NET Framework
del'objet situé le plus à gauche dans l'opération.
Windows PowerShell tente de convertir tous les objets de
l'opération vers le type .NET Framework du premier
objet. S'il réussit à convertir les objets, il exécute
l'opération appropriée au type .NET Framework du premier objet.
S'il ne peut convertir aucun des objets, l'opération échoue.
L'exemple suivant illustre l'utilisation des opérateurs
d'addition et de multiplication dans des opérations incluant
différents types d'objets :
C:\PS> "fichier" + 16
fichier16
C:\PS> $array = 1,2,3
C:\PS> $array + 16
1
2
3
16
C:\PS> $array + "fichier"
1
2
3
fichier
C:\PS> "fichier" * 3
fichierfichierfichier
Étant donné que la méthode utilisée pour évaluer les instructions est
déterminée par l'objet situé le plus à gauche, l'addition et la
multiplication ne sont pas strictement commutatives dans Windows
PowerShell. Par exemple, l'opération (a + b) n'est pas toujours
égale à (b + a) et l'opération (a * b) n'est pas toujours égale à (b * a).
Les exemples suivants illustrent ce principe :
C:\PS> "fichier" + 2
fichier2
C:\PS> 2 + "fichier"
Impossible de convertir la valeur " fichier " en type
" System.Int32 ". Erreur : " Le format de la chaîne d'entrée est
incorrect. "
À la ligne : 1 Caractère : 4
+ 2 + <<<< "fichier"
C:\PS> "fichier" * 3
fichierfichierfichier
C:\PS> 3 * "fichier"
Impossible de convertir la valeur " fichier " en type
" System.Int32 ". Erreur : " Le format de la chaîne d'entrée est
incorrect. "
À la ligne : 1 Caractère : 4
+ 3 * <<<< "fichier"
Les tables de hachage représentent un cas légèrement différent.
Vous pouvez ajouter des tables de hachage. En outre, une table
de hachage peut être ajoutée à un tableau. Toutefois, il est
impossible d'ajouter un autre type à une table de hachage.
Les exemples suivants montrent comment ajouter des tables de
hachage les unes aux autres et à d'autres objets :
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
Vous ne pouvez ajouter une autre table de hachage qu'à une
table de hachage.
À la ligne : 1 Caractère : 9
+ $hash1 + <<<< 2
C:\PS> 2 + $hash1
Impossible de convertir " System.Collections.Hashtable " en
" System.Int32 ".
À la ligne : 1 Caractère : 4
+ 2 + <<<< $hash1
Les exemples ci-dessous montrent que vous pouvez ajouter une
table de hachage à un tableau. La table de hachage entière est
ajoutée au tableau comme un objet unique.
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
L'exemple suivant montre que vous ne pouvez pas ajouter les unes
aux autres des tables de hachage contenant la même clé :
C:\PS> $hash1 = @{a=1; b=2; c=3}
C:\PS> $hash2 = @{c="rouge"}
C:\PS> $hash1 + $hash2
Argument incorrect pour l'opérateur " + " : L'élément a déjà
été ajouté. Clé du dictionnaire : " c " Clé ajoutée : " c ".
À la ligne : 1 Caractère : 9
+ $hash1 + <<<< $hash2
Bien que les opérateurs d'addition soient très utiles, faites
appel aux opérateurs d'affectation pour ajouter des éléments aux
tables de hachage et aux tableaux. Pour plus d'informations, consultez
about_assignment_operators. Les exemples suivants utilisent l'opérateur
d'affectation += pour ajouter des éléments à un tableau :
C:\PS> $array
1
2
3
C:\PS> $array + "fichier"
1
2
3
fichier
C:\PS> $array
1
2
3
C:\PS> $array += "fichier"
C:\PS> $array
1
2
3
fichier
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 sélectionne automatiquement le type numérique
.NET Framework qui exprime le mieux le résultat sans perte de
précision. Par exemple :
C:\PS> 2 + 3.1
5.1
C:\PS> (2). GetType().FullName
System.Int32
C:\PS> (2 + 3.1).GetType().FullName
System.Double
Si le résultat d'une opération est trop grand pour le type, le
type du résultat est étendu en fonction du résultat, comme dans
l'exemple suivant :
C:\PS> (512MB).GetType().FullName
System.Int32
C:\PS> (512MB * 512MB).GetType().FullName
System.Double
Le type du résultat ne sera pas nécessairement identique à celui
de l'un des opérandes. Dans l'exemple suivant, le type de la
valeur négative ne peut pas être converti (transtypage) en entier
non signé et l'entier non signé est trop grand pour être converti
en Int32 :
C:\PS> ([int32]::minvalue + [uint32]::maxvalue).gettype().fullname
System.Int64
Dans cet exemple, Int64 peut prendre en charge les deux types.
Le type System.Decimal est une exception. Si l'un ou l'autre des
opérandes est de type Decimal, le résultat correspondra au type
Decimal. Si le résultat est trop grand pour le type Decimal, son
type ne sera pas converti (transtypage) vers le type Double. Au
lieu de cela, une erreur est générée.
C:\PS> [Decimal]::maxvalue
79228162514264337593543950335
C:\PS> [Decimal]::maxvalue + 1
La valeur était trop grande ou trop petite pour un Decimal.
À la ligne : 1 Caractère : 22
+ [Decimal]::maxvalue + <<<< 1
OPÉRATEURS ARITHMÉTIQUES ET VARIABLES
Vous pouvez également utiliser les opérateurs arithmétiques avec
des variables. Les opérateurs agissent sur les valeurs des
variables. Les exemples suivants illustrent l'utilisation des
opérateurs arithmétiques avec les variables :
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
OPÉRATEURS ARITHMÉTIQUES ET COMMANDES
Les opérateurs arithmétiques sont généralement utilisés dans des
expressions avec des nombres, des chaînes et des tableaux.
Toutefois, vous pouvez également les employer avec les objets
retournés par les commandes et avec les propriétés de ces objets.
Les exemples suivants montrent comment utiliser les opérateurs
arithmétiques dans des expressions avec les commandes Windows
PowerShell :
C:\PS> get-date
Mercredi 02 janvier 2008 13:28:42
C:\PS> $day = new-timespan -day 1
C:\PS> get-date + $day
Jeudi 03 janvier 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
EXEMPLES
Les exemples suivants montrent comment utiliser les opérateurs
arithmétiques dans Windows PowerShell :
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"
Impossible de convertir la valeur " w " en type " System.Int32 ".
Erreur : " Le format de la chaîne d'entrée est incorrect. "
À la ligne : 1 Caractère : 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 = "FichiersTest.txt"
C:\PS> $b = "C:\Logs\"
C:\PS> $b + $a
C:\Logs\FichiersTest.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"} #Utiliser l'opérateur d'affectation
C:\PS> $servers
Name Value
---- -----
3 Server03
2 Server02
1 Server01
0 LocalHost
VOIR AUSSI
about_Arrays
about_Assignment_Operators
about_Comparison_Operators
about_Hash_Tables
about_Operators
about_Variables
Get-Date
New-TimeSpan