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




Table des matières