Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. PowerShell Core et Windows PowerShell
  3. Opérateurs
Extrait - PowerShell Core et Windows PowerShell Les fondamentaux du langage (2e édition)
Extraits du livre
PowerShell Core et Windows PowerShell Les fondamentaux du langage (2e édition)
4 avis
Revenir à la page d'achat du livre

Opérateurs

Introduction

Il existe de très nombreux types d’opérateurs, mais qu’ils soient arithmétiques, binaires, logiques ou autres, tous permettent d’agir sur les variables. Gardez bien à l’esprit que connaître et maîtriser ces différents opérateurs est essentiel pour l’élaboration d’un bon script.

1. Opérateurs arithmétiques

En ce qui concerne les opérations arithmétiques, PowerShell traite les expressions de gauche à droite en respectant les règles des propriétés mathématiques ainsi que les parenthèses. 

Exemple


PS > 2+4*3 
14 
PS > (2+4)*3 
18
 

La liste des opérateurs arithmétiques disponibles vous est donnée ci-dessous :

Signe

Signification

+

Addition

-

Soustraction

*

Multiplication

/

Division

%

Modulo

Les quatre premiers opérateurs doivent logiquement vous sembler familiers, quant au dernier, l’opérateur modulo, celui-ci permet de retourner le reste d’une division entière de a par b.

Par exemple, en tapant 5%3 dans la console, nous obtenons 2. Tout simplement parce qu’il y a 1 fois 3 dans 5 et que le reste de la division vaut 2.

Vous constaterez que les opérations arithmétiques s’appliquent également aux variables. Ainsi, $var1 + $var2 vous retournera la somme des deux variables si elles contiennent...

Opérateurs de comparaison

Avec un nom aussi évocateur, inutile de préciser que les opérateurs de comparaison permettent de comparer des données entre elles. Contrairement à d’autres langages, PowerShell utilise les mêmes opérateurs que ce soit pour comparer des nombres, des chaînes de caractères, ainsi que pour effectuer des recherches d’éléments dans un tableau. 

Voici l’ensemble des opérateurs de comparaison :

Opérateur

Signification

-eq

Égal

-ne

Non égal (différent)

-gt

Strictement supérieur

-ge

Supérieur ou égal

-lt

Strictement inférieur

-le

Inférieur ou égal

Important : il faut connaître une petite subtilité du langage qui fait que les opérateurs n’ont pas le même comportement lorsqu’ils sont appliqués à une valeur scalaire ou à un tableau. En effet, appliqués à un scalaire, les opérateurs retournent une valeur booléenne, ce qui n’est pas le cas avec un tableau.

1. Comparaison sur des scalaires

Une valeur scalaire est une valeur atomique, telle qu’un nombre, un caractère ou une chaîne de caractères. On oppose généralement les tableaux aux scalaires, tableaux qui contiennent généralement (mais pas tout le temps) des valeurs scalaires....

Opérateurs de comparaison générique

Une expression générique est une expression qui contient un caractère dit « générique ». Par exemple, l’étoile (*) remplace n’importe quelle suite de caractères, et le point d’interrogation (?) se substitue à un caractère unique.

Comme les opérateurs de comparaison précédents, les opérateurs génériques ne retournent pas le même type de données selon qu’ils sont appliqués à une valeur scalaire ou à un tableau.

Il existe deux opérateurs de comparaison permettant de comparer une chaîne avec une expression générique.

Opérateur

Signification

-like

Comparaison d’égalité d’expression générique.

-notlike

Comparaison d’inégalité d’expression générique.

Pour mieux comprendre l’utilisation de ces opérateurs, voici quelques exemples d’applications :


# Opérations sur scalaires 
 
PS > 'Powershell' -like '*shell' 
True 
 
PS > 'powershell' -like  'power*' 
True 
 
PS > 'Powershell' -clike 'p*shell' 
False 
 
PS > 'powershell' -like '*war*' 
False 
 
PS >...

Opérateur de comparaison des expressions régulières

Les expressions régulières (regex) sont bien connues des administrateurs systèmes Unix/Linux, mais généralement beaucoup moins connues des administrateurs Windows. La raison vient du fait que les premiers sont habitués à manipuler du texte avec des outils en ligne de commandes usuels tels que grep, awk, tail, etc.

Les expressions régulières représentent un métalangage extrêmement puissant dédié à la manipulation des chaînes de caractères. On les utilise pour comparer des chaînes et/ou pour capturer des chaînes de caractères répondant à un modèle spécifique à l’intérieur de fichiers texte.

Les expressions régulières sont, dans les années 1950, sorties de la tête d’un mathématicien chevronné, puis implémentées dans les années 70 dès les premières versions d’Unix. C’est peut-être la raison pour laquelle leur syntaxe peut paraître assez cabalistique au premier abord, mais ne vous laissez pas impressionner !

Nous vous invitons à consulter l’aide en ligne et en particulier la rubrique d’aide about_Regular_Expression qui constitue une entrée en matière intéressante.

PowerShell dispose des deux opérateurs de comparaison d’expressions régulières suivants :

Opérateur

Signification

-match

Comparaison d’égalité entre un pattern et une expression régulière.

-notmatch

Comparaison d’i

négalité entre un pattern et une expression régulière.

Le principe des expressions régulières est de faire correspondre un modèle (appelé « pattern » en anglais) avec une chaîne de caractères. Elles permettent d’analyser de grandes quantités de données, et ce de manière très performante et en un minimum d’efforts (lorsqu’on les maîtrise).

Le principal inconvénient est que le modèle peut vite devenir très complexe, et être encore plus difficile à déchiffrer et à maintenir plusieurs mois après l’avoir écrit ;...

Opérateur de plage

L’opérateur de plage se note .. (prononcez « point point »). Il permet, comme son nom l’indique, de couvrir une plage de valeurs. Admettons que nous souhaitions couvrir une plage de valeurs allant de 1 à 10 (pour réaliser une boucle par exemple), eh bien il suffit de taper la ligne qui suit :


PS > 1..10 
1 
2 
3 
.. 
10
 

On peut, de la même manière, définir une plage dynamiquement en utilisant des variables. Rien ne vous empêche de définir une plage allant de $var1 à $var2 si ces valeurs sont des entiers.

Exemple


PS > $var1 = 5 
PS > $var2 = 10 
PS > $var1 .. $var2 
5 
6 
7 
8 
9 
10
 

Opérateurs d’appartenance

En PowerShell, on parle souvent de collection d’objets ou de tableau d’objets. L’opérateur d’appartenance, introduit depuis PowerShell 3.0, permet de savoir si oui ou non un objet est présent dans une collection.

Opérateur

Signification

-in

Teste si une valeur est dans une collection.

-notIn

Teste si une valeur n’est pas dans une collection.

Pour mieux comprendre l’utilisation de ces opérateurs, voici quelques exemples d’applications :


PS > 'shell' -in 'Console', 'shell'  
True 
 
PS > 'shell' -in 'Console', 'powershell' 
False 
 
PS > 85 -in 1..99 
True
 

L’opérateur jumeau de -in est l’opérateur -contains. En effet, il fonctionne comme -in mais de façon inverse. Libre à vous de choisir celui qui correspond le mieux à la logique de votre script.

Opérateur

Signification

-contains

Teste si une collection contient une valeur particulière.

-notContains

Teste si une collection ne contient pas une valeur particulière. 

Pour mieux comprendre l’utilisation de ces opérateurs, voici quelques exemples d’applications :


PS > 'Console', 'shell' -contains 'shell' 
True 
 
PS > 'Console', 'powershell' -contains 'shell'...

Opérateur de remplacement

L’opérateur de remplacement -replace est un opérateur extrêmement puissant. Il aurait probablement mérité de s’appeler -searchAndReplace tellement il est efficace, mais probablement que son nom aurait été jugé trop long.

Dans sa forme la plus simple -replace peut s’appliquer sur une chaîne simple (scalaire), comme dans l’exemple suivant :


PS > 'PowerShell' -replace 'Shell', 'Guy' 
PowerGuy
 

Shell représente la chaîne à rechercher, et Guy la chaîne de remplacement.

Bien que cela fonctionne parfaitement, ce cas d’usage n’offre pas plus de fonctionnalité que la méthode Replace() appliquée à une chaîne, tel que ci-dessous :


PS > $MaChaine = 'PowerShell' 
PS > $MaChaine.Replace('Shell','Guy')  
PowerGuy
 

Le gros intérêt de cet opérateur c’est qu’il peut s’appliquer à un tableau afin de chercher et remplacer une valeur par une autre. Mieux encore, -replace accepte en entrée une expression régulière, ce qui permet des recherches complexes et bien plus encore…

1. Remplacements à l’aide d’une expression régulière

Même si on utilise une chaîne de caractères simple pour effectuer...

Opérateurs de type

Jusqu’à présent, nous vous avons montré comment typer votre valeur et même comment récupérer le type avec la méthode GetType. Mais ce que nous allons désormais découvrir est comment tester le type d’une variable.

Ces opérateurs sont relativement peu utilisés dans la mesure où lorsque nous définissons des paramètres (dans les scripts ou les fonctions), nous leur donnons un type. Il n’est donc pas vraiment utile de tester leur type… Ceci étant, comme ces opérateurs existent, il nous semblait utile de vous en parler.

Opérateur

Signification

-is

Test si l’objet est du même type.

-isNot

Test si l’objet n’est pas du même type.

Pour illustrer l’utilisation de ces opérateurs, voici quelques exemples d’applications :


PS > 'Bonjour' -is [string] 
True 
 
PS > 20 -is [int] 
True 
 
PS > 'B' -is [int] 
False
 

Opérateurs logiques

Les opérateurs logiques permettent de vérifier jusqu’à plusieurs comparaisons dans une même expression. Par exemple : ($var1 -eq $var2) -and ($var3 -eq $var4) renverra le booléen true si $var1 est égal à $var2 et que $var3 est égal à $var4, dans le cas contraire la valeur false sera renvoyée. Voici la liste des opérateurs logiques disponibles :

Opérateur

Signification

-and

ET logique

-or

OU logique

-not

NON logique

!

NON logique

-xor

OU exclusif

Pour mieux comprendre l’utilisation de ces opérateurs, voici quelques exemples d’applications :


PS > (5 -eq 5) -and (8 -eq 9) 
False
 

Faux, car 5 est bien égal à 5, mais 8 n’est pas égal à 9.


PS > (5 -eq 5) -or (8 -eq 9) 
True
 

Vrai, car l’une des deux expressions est vraie, 5 est bien égal à 5.


PS > -not (8 -eq 9) 
True 
 
PS > !(8 -eq 9) 
True
 

Vrai, car 8 n’est pas égal à 9.

Opérateurs binaires

Les opérateurs binaires sont utilisés pour effectuer des opérations entre nombres binaires. Pour rappel, le système binaire est un système en base 2, contrairement au système décimal qui lui est en base 10. C’est-à-dire que la notation ne comporte que des 0 et des 1.

Exemple de conversion de nombres décimaux en base binaire


Décimal  Binaire 
   0      0000 
   1      0001 
   2      0010 
   3      0011 
   4      0100 
   5      0101
 

Lorsque nous faisons appel à l’un des opérateurs binaires suivants, les bits des valeurs sont comparés les uns après les autres, puis selon que nous appliquons un ET ou un OU nous obtenons un résultat différent.

Opérateur

Signification

-band

Opérateur ET

-bor

Opérateur OU

-bnot

Opérateur NON

-bxor

Opérateur OU exclusif

-shr

Décalage des bits vers la droite

-shl

Décalage des bits vers la gauche

Le résultat retourné après une comparaison binaire est automatiquement converti en système décimal et non pas en système binaire.

Imaginons que pour une application quelconque nous souhaitions savoir si le bit de poids faible d’une variable est égal à...

Opérateurs d’affectation

Vous savez donc maintenant comment affecter une valeur à une variable et réaliser une opération sur cette dernière. Maintenant nous allons vous montrer comment faire les deux en même temps en une seule opération.

Les opérations qui sont décrites dans ce tableau donnent strictement le même résultat. 

Notation classique

Notation raccourcie

$i=$i+8

$i+=8

$i=$i-8

$i-=8

$i=$i*8

$i*=8

$i=$i/8

$i/=8

$i=$i%8

$i%=8

$i=$i+1

$i++

$i=$i-1

$i--

La notation $i++ ou $i-- est très utilisée dans les conditions de boucle de façon à incrémenter $i de 1 à chaque passage.

Ainsi, par exemple, voici comment ajouter une valeur avec l’opérateur d’affectation +=.


PS > $i = 0 
PS > $i += 15 
PS > $i 
15
 

Si on affiche la valeur de la variable $i, on obtient bien 15, car cette instruction est équivalente à : $i = $i + 15.

Poursuivons avec cette fois le calcul des factoriels des chiffres allant de 1 à 10.

Pour cela, nous créons une boucle et, pour chaque valeur de $i, nous la multiplions par la valeur de $var avant de la lui réaffecter :


PS > $var = 1 
PS > foreach($i in 1..10){$var *= $i ; $var} 
1 
2 
6 
24 
120 
720 
5040 
40320 
362880 
3628800
 

Comme nous n’avons pas encore abordé...

Opérateurs de redirection

Il faut savoir que les interpréteurs de commandes traitent les informations selon une entrée, une sortie et une erreur standard, chaque élément étant identifié par un descripteur de fichier.

Descripteur

Identification

Explication

0

Standard Input

Flux d’entrée par lequel les données sont entrées dans le shell. Par défaut, le clavier est utilisé comme entrée standard.

1

Standard Output

Flux de sortie par défaut par lesquelles les données sont émises. Le flux standard est utilisé par la plupart des commandes qui affichent un résultat à l’écran.

2

Error

Flux de sortie permettant au shell d’émettre les messages d’erreur. La visibilité de ces derniers est gérée via la variable $ErrorActionPreference.

3

Warning

Flux de sortie permettant au shell d’émettre les messages d’avertissement. Ces derniers ne sont visibles que si la variable $WarningPreference est positionnée à la valeur Continue.

4

Verbose

Flux de sortie des messages verbeux. Ces messages sont visibles lorsque le mode verbose est activé via la variable $VerbosePreference.

5

Debug

Flux de sortie des messages de débogage. Ces messages sont visibles lorsque le mode debug est activé via la variable $DebugPreference.

6

Information

Flux de sortie des messages d’information. Ces derniers ne sont visibles que si la variable $InformationPreference est positionnée à la valeur Continue.

*

Tous les flux

Le caractère étoile représente tous les flux.

Les flux *, 3, 4 et 5 et leurs variables de préférence associées ont été introduits dans la version 3 de PowerShell.

Le flux 6 (information) a été introduit dans la version 5.

Par défaut, c’est la console qui est la sortie standard de tous les flux énumérés précédemment. Mais de façon à pouvoir les rediriger avec souplesse, PowerShell dispose d’une batterie d’opérateurs. Ces derniers sont identiques à ceux utilisés dans le shell Unix :

Opérateur

Signification

x> y

Redirige le flux x vers le fichier y. Si le fichier y existe déjà...

Opérateurs de fractionnement et de concaténation

Les opérateurs de fractionnement et de concaténation permettent de combiner ou bien de fractionner à volonté des chaînes de caractères.

Opérateur

Signification

-split

Fractionne une chaîne en sous-chaînes.

-join

Concatène plusieurs chaînes en une seule.

Ainsi, par exemple, voici comment fractionner une chaîne en plaçant l’opérateur -split en début de ligne.


PS > -split 'PowerShell c'est facile' 
PowerShell 
c'est 
facile
 

Par défaut, le fractionnement est réalisé avec le délimiteur espace « ». Pour changer de délimiteur, il convient de placer l’opérateur en fin de ligne et de le faire suivre du caractère souhaité.

Exemple


PS > 'Nom:Prénom:Adresse:Date' -split ':' 
Nom 
Prénom 
Adresse 
Date
 

Le délimiteur peut être : un caractère unique, une chaîne de caractères, une expression régulière ou un bloc de script (scriptblock).

Pour plus de détails, il existe la rubrique d’aide about_Split qui est très complète.

L’opérateur -join permet de réaliser la concaténation de différentes chaînes de caractères d’un même...

Opérateur de format -f

1. Notions de base

L’opérateur de format -f permet de formater des chaînes de caractères façon .NET, c’est-à-dire exactement de la même manière que nous pourrions le faire en VB.NET ou C#.

Le principe de base est très simple ; en effet, il va s’agir de réserver un ou plusieurs emplacements prédéfinis dans une chaîne de caractères et de substituer ces derniers par une valeur (ou expression). Il suffit alors de placer un ou plusieurs nombres entre accolades (commençant par zéro) dans une chaîne, et automatiquement ces derniers seront substitués par une valeur au moment de l’exécution.

Exemple 1 :


PS > $str = 'powershell'  
PS > '{0} est un puissant langage de scripts.' -f $str.ToUpper()  
POWERSHELL est un puissant langage de scripts.
 

Il existe bien entendu d’autres façons de concaténer des chaînes de caractères, néanmoins nous affectionnons particulièrement l’opérateur -f car il apporte une certaine facilité d’écriture et une aisance accrue pour la compréhension du code. Cela est d’autant plus vrai lorsque l’on a de nombreuses données à concaténer, à présenter à l’écran ou à mettre...

Récapitulatif sur les opérateurs

Dans cette liste vous retrouverez tous les opérateurs énoncés au cours de ce chapitre :

Opérateur

Signification

-eq

Égal.

-lt

Inférieur à.

-gt

Supérieur à.

-le

Inférieur ou égal à.

-ge

Supérieur ou égal à.

-ne

Différent de.

-not

Non logique.

!

Non logique.

-match

Comparaison d’égalité entre une expression et une expression régulière.

-notMatch

Comparaison d’inégalité entre une expression et une expression régulière.

-like

Comparaison d’égalité d’expression générique.

-notLike

Comparaison d’inégalité d’expression générique.

-replace

Opérateur de remplacement.

-and

ET logique.

-or

OU logique.

-bor

Opérateur de bits OU.

-band

Opérateur de bits ET.

-bxor

Opérateur de bits OU exclusif.

-shr

Décalage des bits vers la droite.

-shl

Décalage des bits vers la gauche.

-xor

OU exclusif.

-is

Opérateur d’égalité de type.

-isNot

Opérateur d’inégalité de type.

-in

Teste si une valeur est dans une collection.

-notIn

Teste si une valeur n’est pas dans une collection.

-contains

Teste si une collection contient une valeur.

-notContains

Teste si une collection ne contient pas une valeur.

-ceq

Égal (respecte la casse).

-clt

Inférieur à (respecte la casse).

-cgt

Supérieur à (respecte la casse).

-cle

Inférieur ou égal à (respecte la casse).

-cge

Supérieur ou égal à (respecte la casse).

-cne

Différent de (respecte...