Comment faire des maths avec PowerShell ?

I. Présentation

Dans ce tutoriel, nous allons voir comment faire des maths avec PowerShell : addition, soustraction, division, multiplication, etc... Retour à l'école primaire !

En soi, mon objectif ce n'est pas de vous faire un cours de mathématiques en PowerShell, mais il faut avouer que les maths en programmation, c'est pratique et cela fait partie des choses à connaître lorsque l'on apprend un nouveau langage.

II. PowerShell : comment additionner deux valeurs ?

Pour ce premier exemple, j'attire votre attention sur le fait que le type de la variable est très important lorsqu'il s'agit de manipuler des chiffres. En effet, pour additionner, soustraire, etc... des valeurs entre elles, il faut qu'elles soient du type "int" pour "integer", c'est-à-dire un nombre entier.

Prenons un exemple.... Je vais définir deux variables $Chiffre1 de type "string" (c'est-à-dire chaîne de caractères) et $Chiffre2 de type "int".

[string]$Chiffre1 = 1
[int]$Chiffre2 = 2

Lorsque l'on a besoin d'additionner deux valeurs, il suffit d'ajouter un "+" entre les deux valeurs, ou les deux noms de variables. Ainsi, si l'on additionne $Chiffre1 et $Chiffre2, on doit obtenir "3". Essayons pour voir...

$Chiffre1 + $Chiffre2

La console PowerShell me retourne ceci :

12

Hum, je n'obtiens pas "3" mais "12" qui correspond tout simplement aux valeurs de mes deux variables écrites à la suite. Autrement dit, PowerShell n'a pas fait de calcul ! En fait, c'est à cause de notre variable $Chiffre1 qui a le type "string" ! Si l'on refait le même exercice avec le type "int" sur les deux variables, nous verrons que cela fonctionne :

[int]$Chiffre1 = 1
[int]$Chiffre2 = 2
$Chiffre1 + $Chiffre2

Cette fois-ci, le résultat obtenu est correct :

3

Voici un résumé en image de ce que l'on vient de faire :

Il faut savoir que j'ai forcé le type "[int]" sur mes deux variables mais ce n'est pas obligatoire. PowerShell est suffisamment intelligent pour typer les variables lui-même selon les données affectées (généralement, ça fonctionne bien). Prenons un exemple :

$chiffre3 = 3

Si l'on regarde le type de cette variable, on verra que c'est "Int32", ce qui correspond bien à type de la "catégorie" des nombres entiers.

$chiffre3.GetType()

Pour faire des additions en PowerShell, retenez qu'il suffit d'ajouter un "+" entre les valeurs. Voici différents exemples :

1 + 1
$chiffre3 + 10
1+1+1+1

III. PowerShell : comment soustraire deux valeurs ?

Pour soustraire deux valeurs, c'est le même principe : il faut que le type des variables le permette, et ensuite on va utiliser le signe "-" à la place de "+", comme nous avons appris à l'école en fait. Il suffit d'essayer :

2 - 2

Vous allez obtenir "0". Sur le même principe que toute à l'heure, on peut utiliser deux variables.

$chiffre1 = 10
$chiffre2 = 1
$chiffre1 - $chiffre2

On peut tout à fait obtenir une valeur négative, inférieure à zéro, lorsque l'on effectue des soustractions avec PowerShell.

PowerShell soustraction de valeurs

IV. PowerShell : comment diviser une valeur ?

Pour diviser une valeur en PowerShell, on utilisera le signe "/" pour séparer les deux valeurs. Pour vous souvenir des caractères à utiliser, il vous suffit de vous rappeler de la façon dont il faut écrire ces opérations de calcul avec la Calculatrice Windows, ou dans Excel, par exemple.

Quelques exemples :

# Exemple 1

10 / 2
= 5

# Exemple 2

$chiffre1 = 10
$chiffre2 = 3
$chiffre1 / $chiffre2
= 3,33333333333333

# Exemple 3

(10 + 10) / 2
= 10

V. PowerShell : comment multiplier une valeur ?

Avant de passer à l'utilisation d'autres fonctions un peu plus spécifiques, il nous reste à voir les multiplications. Cette fois-ci, c'est le caractère "*" qui va servir d'opérateur pour multiplier des valeurs en PowerShell. Le principe d'utilisation reste le même.

# Exemple n°1

10 * 2
= 20

# Exemple n°2

$chiffre1 = 10
$chiffre2 = 3
$chiffre1 * $chiffre2
= 30

Ce dernier exemple, montre que l'on peut combiner l'utilisation des différents opérateurs dans une même opération mathématique.

((10 * 10) - 10 + 100) / 2
= 95

Les parenthèses sont importantes également, comme lorsque l'on fait des maths pour de vrai. Regardez ces deux exemples pour bien comprendre :

VI. PowerShell et la classe .NET System.Math

Avec .NET, il y a une classe nommée Math et qui contient 45 méthodes permettant d'utiliser des fonctions de calcul diverses et variées. Même si l'on n'utilise pas cela tous les jours dans un script, c'est bien de savoir que cela existe. On peut lister l'ensemble des méthodes de cette classe avec la commande suivante :

[System.Math] | Get-Member -Static -MemberType Methods

Voici la liste, assez conséquente, comme vous pouvez le constater :

Par exemple, la méthode "Pow()" permet de calculer la puissance, par exemple "2 puissance 8" donc il faut bien préciser les deux nombres au sein de la méthode. Voici un exemple :

[math]::Pow(2,8)
# Résultat = 256

Si vous souhaitez comparer deux valeurs pour obtenir la valeur maximale entre les deux, il est possible d'utiliser la méthode "Max()" en lui précisant les deux valeurs (directement ou via une variable) :

$chiffre1 = 100
$chiffre2 = 95
[math]::Max($chiffre1,$chiffre2)
# Résultat = 100

Dans le même esprit, vous pouvez remplacer "Max" par "Min" pour obtenir la valeur la plus faible entre les deux valeurs.

Pour arrondir une valeur à la décimale inférieure ou supérieure, la méthode Round() sera utile. On indique un nombre en paramètre et la méthode va l'arrondir, en fonction de ce qui est le plus pertinent. Voici la syntaxe :

[math]::Round(10.7)
# Résultat : 11

On peut voir qu'avec la valeur "10.3", c'est arrondi à 10 et non à 11, ce qui est logique. Pour la valeur "10.5", on obtient "10" tandis que pour "10.51" on obtient "11".

Nous venons de voir l'essentiel lorsqu'il s'agit de faire des opérations mathématiques avec PowerShell. Si vous souhaitez aller plus loin, regardez les différentes méthodes de la classe System.Math.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian has 3500 posts and counting.See all posts by florian

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.