Académique Documents
Professionnel Documents
Culture Documents
I- LES OPERATEURS
1. Définir opérateur
Les Opérateurs sont des fonctions spéciales qui sont capables d’effectuer des
opérations arithmétiques, booléennes, binaires ou même logiques.
En PowerShell les opérateurs sont incontournables dans l’écriture des scripts où ils
permettent essentiellement d’agir sur des variables.
Les Opérateurs arithmétiques sont les plus connus et sont au nombre de 5. Ils
sont résumés dans le tableau ci-dessous.
Opérateur Description
+ Addition
* Multiplication
/ Division
- Soustraction
% Modulo
Exemple 2 : Utilisation sur les variables
$var1 = 200
$var2 = 100
$var1 + $var2
300
Exemple 3 : Action sur les chaines de caractères
$String1 = ‘Mon père’
$String2 = ‘ et Ma mère’
$String1 + $String2
Mon père et Ma mère
Opérateurs Description
-eq Égal à
-ne Différent de
-lt Inferieur à
-le Inférieur ou égal à
-gt Supérieur à
-ge Supérieur ou égal à
4. comparaison générique
Les caractères génériques sont des caractères spéciaux qu’on utilise pour
remplacer des caractères inconnus dans une valeur de texte.
Il existe plusieurs caractères génériques mais dans PowerShell les deux
caractères suivants sont les plus utilisés :
(*) : Le caractère étoile permet de remplacer n’importe quelle suite de
caractères.
(?) : Le caractère point d’interrogation permet de remplacer n’importe quels
caractères uniques.
Les expressions génériques sont des expressions qui contiennent un caractère
générique.
Présenté et rédigé par SDU
34
Scripting Linux et PowerShell
Les Opérateurs logiques permettent d’utiliser une seule expression pour tester
plusieurs conditions.
Le résultat des tests effectués est toujours un Booléen (True ou False).
Les opérateurs logiques sont au nombre de 5 et sont résumés dans le tableau
suivant.
Opérateurs Description
-and Et logique.
Le résultat du test est True lorsque toutes les conditions sont
vraies. Et False lorsqu’au moins une seule des conditions est
fausse.
-or Ou logique
Le résultat du test est True lorsqu’au moins une seule des
conditions est vraie. Dans le cas contraire c’est False
-xor Ou exclusif
Le résultat du test est True lorsque seulement une seule des
conditions est vraie. Dans le cas contraire c’est False
-not Non logique
Le résultat du test est True lorsque la condition évaluée est
fausse. Dans le cas contraire c’est False
! Non logique
L’opérateur de substitution –replace remplace tout ou une partie d’une valeur par
la valeur de remplacement spécifiée.
L’opérateur –replace peut être utilisé dans la plupart des taches d’Administration.
Les opérateurs de Type sont utilisés pour déterminer si un objet est d’un Type
Spécifique.
PowerShell retourne un Booléen (True ou False) comme résultat de test. Ils
sont au nombre de 2. Ce sont :
Opérateurs Description
-is Test si l’objet est du Type spécifié
-isnot Test si l’objet n’est pas du Type spécifié
Exemple 1 : Test sur les Types String et int
‘Formation’ –is [string]
True
150 –is [int]
True
‘Formation’ –isnot [int]
True
On utilise les opérateurs binaires pour effectuer des opérations binaires. Ci-
dessous le tableau des opérateurs binaires et leur description.
Opérateurs Description
-band ET
Le résultat est 1 seulement si nous avons deux 1 en entrée.
Dans les autres cas, le résultat est 0
-bor OU
Le résultat est 0 seulement si nous avons deux 0 en entrée.
Dans les autres cas, le résultat est 1
-bnot NON
Il inverse les bits qu’on lui met en entrée
-bxor OU Exclusif
Le résultat est 1 seulement si une seule des deux entrées est 1.
Dans les autres cas, le résultat est 0
-shr Décalage des bits vers la droite
-shl Décalage des bits vers la gauche
Exemple 1 : Dans cet exemple nous allons déclarer deux tableaux que nous
allons concaténer par la suite.
$tableau1 = 10, ’Oranges’, 20
$tableau2 = ’Mangues’, 40, ’Citrons’
$tableau1 + $tableau2
Explication :
Tout le contenu du tableau est passé à travers le pipe | par la variable $tableau1. Ce
contenu est ensuite récupéré par l’instruction Where-Object qui va sélectionner
toutes les valeurs différentes (-ne) de 'citrouilles'. Ces valeurs sont ensuite
réaffectées au tableau1 grâce au signe =
Une boucle est une structure répétitive également appelée structure itérative, elle
permet de répéter plusieurs fois l’exécution d’une ou plusieurs instructions. Le
nombre de répétions peut-être connus à l’avance ou peut dépendre de
l’évaluation d’une condition.
Ainsi à chaque répétition les instructions contenues dans la boucle sont
exécutées. C’est ce qu’on appelle une itération.
Il existe plusieurs boucles dans PowerShell, et ce module va nous permettre de
Les découvrir.
Fonctionnement :
1. La valeur initiale est évaluée par PowerShell
2. La condition de répétition est également évaluée
3. Si la condition est fausse, la boucle s’arrête
4. Si la condition est vraie, alors le bloc d’instruction est exécuté.
5. La valeur initiale est incrémentée avec le pas d’incrémentation puis
l’exécution reprend à partir de l’étape 2
Explication :
initial :
$n=50 : Valeur de départ (initiale) de la variable de référence de la boucle For
condition :
$n -ge 0 : le contenu de la variable doit être supérieur ou égal à 0, pour que le
bloc d’instruction continue d’être exécuté par PowerShell.
incrément :
$n=$n-10 : Le pas est de 10, donc la variable $n va se décrémenter de 10 à
chaque itération.
Bloc d’instructions :
{$n} est l’instruction à exécuter d’où la présence des accolades. Cette instruction
demande à PowerShell d’afficher le contenu de la variable $n à chaque itération.
La boucle Foreach (For each qui signifie pour chaque en français) est utilisée
pour parcourir une collection de données.
Avec Foreach pas besoin de connaitre à l’avance le nombre d’éléments de la
collection. C’est l’une des boucles les plus utilisées dans les scripts.
Voici sa syntaxe :
{
#bloc d’instructions
}
Fonctionnement :
1. PowerShell évalue la condition de la Boucle.
2. Si la condition est vraie alors PowerShell exécute le bloc d’instruction.
3. Si la condition est fausse le bloc d’instruction n’est pas exécuté.
4. Retour à l’étape Numéro
Exemple : Comptage
Explication :
$n=50 : initialisation de la valeur de départ à 50
While ($n -ge 0) : Tant que la variable $n reste inférieur ou égale à 0
write-host $n : Affiche la valeur de la variable. Write-host est une instruction qui
permet à PowerShell d’écrire du contenu à l’écran.
$n=$n-10 : Effectue ce calcul en utilisant la valeur de la variable à cet instant. Ansi,
ce processus va s’effectuer jusqu’à la dernière itération où $n sera égale à
10, en ce moment $n=$n-10 sera égale à 0, l’exécution va alors s’arrêter.
La boucle Do-While est la cousine de While. Ces deux boucles jouent à peu près le
même rôle, sauf que pour Do-while, la condition à satisfaire est à la fin,
contrairement à While où la condition est au début.
Présenté et rédigé par SDU
45
Scripting Linux et PowerShell
Par conséquent avec Do-While, le bloc d’instruction est exécuté au moins une fois
même si la condition est fausse.
Ainsi la boucle Do-While, permet à Powershell d’exécuter un bloc d’instruction tant
que la condition qui se trouve entre les parenthèses demeure vraie.
Voici sa Syntaxe :
Do
{
#bloc d’instructions
}
While (<condition>)
Exemple :
Do
{
$Reponse = Read-Host "Quelle est la capitale du Canada ?"
}
While ($Reponse -ne "OTTAWA")
Dans cet exemple nous constatons que tant que la réponse n’est pas Juste, C’est- à-
dire tant que l’utilisateur n’a pas trouvé la bonne réponse la boucle continue
d’exécuter le bloc d’instructions entre accolades. L’exécution s’arrête seulement si
la bonne réponse est trouvée.
Explication :
L’instruction Read-Host est utilisée dans PowerShell pour lire quelque chose à
l’écran, généralement c’est une question à laquelle l’utilisateur doit répondre. La
réponse à la question est alors lue et mémorisée dans la variable $Reponse. Cette
variable est par la suite utilisée dans la condition while.
-ne : est un opérateur de comparaison que nous utilisons ici pour dire que tant
que le contenu de la variable $Reponse ne correspond pas à OTAWA il faut que
PowerShell continue de poser la question.
Au cas où le contenu de la variable est OTAWA PowerShell arrête d’exécuter
l’instruction, donc de poser la question.
2. Etude de la condition if
Syntaxe de la condition if :
If (condition)
{
#bloc d’instructions
}
Fonctionnement :
1. La condition qui se trouve entre parenthèses est évaluée par PowerShell.
2. Si la condition est satisfaite, le bloc d’instructions est exécuté.
3. Si la condition n’est pas satisfaite le bloc d’instructions n’est pas exécuté.
Explication :
Cet exemple a été déjà utilisé dans le chapitre précédent avec la boucle Do-
While.
En effet, grâce à l’instruction Read-host, une question sera posée à l’utilisateur. La
réponse de l’utilisateur sera alors affectée à la variable $Capitale.
La condition : $Capitale –eq "OTTAWA"
La condition est : Si le contenu de la variable $Capitale est OTTAWA alors
PowerShell va exécuter le bloc d’instruction.
Présenté et rédigé par SDU
47
Scripting Linux et PowerShell
Explication :
Get-service : Va permettre de collecter tous les services qui sont installés sur le PC
ou le serveur. Tous les services trouvés seront immédiatement envoyés à la
commande Foreach grâce au Pipe.
Condition : if ($_.status –eq "Stopped"
Foreach va ensuite évaluer les services l’un après l’autre et trouver tous ceux qui sont
arrêtés
Bloc d’instruction : Write-host $_.name
Cette instruction permet d’afficher les noms des services arrêtés. Seuls les noms sont
affichés. Les autres propriétés sont ignorées.
La clause Else, peut être associée à if. Ainsi, pendant le test, lorsque le critère de la
condition n’est pas satisfait, le traitement est redirigé vers un deuxième bloc
d’instruction précédé de la clause Else.
Fonctionnement :
1. La condition qui se trouve entre parenthèses est évaluée par PowerShell.
2. Si la condition est satisfaite, le bloc d’instructions 1 est exécuté.
3. Si la condition n’est pas satisfaite le bloc d’instructions 2 est exécuté.
Explication :
L’explication a été déjà donnée dans l’exemple 1 de la section 2 du chapitre qui
parle de la structure if.
Ici nous avons ajouté la clause Else qui permet d’exécuter le deuxième bloc
d’instruction au cas où la réponse de l’utilisateur est fausse.
PowerShell répond alors à l’utilisateur en disant qu’il a donné une mauvaise
réponse.
Nous utilisons également dans cet exemple l’opérateur –f qui permet de définir
le format d’affichage des chaines de caractères. Nous pouvons ainsi afficher chaque
réponse avec la couleur de notre choix. Vert pour le premier bloc, donc la bonne
réponse. Et Rouge pour le deuxième bloc donc la mauvaise réponse.
Get-service | foreach {
if ($_.status -eq "stopped")
{
write-host –f Red $_.name
} Else
{
write-host -f Green $_.name
}
}
Explication :
Ici nous avons ajouté la clause Else qui permet d’exécuter le deuxième bloc
d’instruction.
PowerShell affiche alors le service lorsque son statut est « arrêté » pour
satisfaire la condition. Lorsque le statut est « Démarré » la condition n’est pas
satisfaite le deuxième bloc est alors exécuté pour également afficher le service.
Alors pour éviter la confusion nous avons demandé à PowerShell d’afficher les
services arrêtés en rouge et ceux qui sont démarrés en vert grâce à l’utilisation de
l’opérateur –f.
La condition if… elseif… else (« si… sinon si… sinon ») est la structure conditionnelle
la plus complète qui permet de tester autant de conditions que possible. Nous
pouvons rajouter autant de elseif que de cas que l’on souhaite traiter au sein d’une
condition. Vous remarquez qu’il faut évidemment effectuer un test dans chaque
elseif.
Notez également que nous allons dans tous les cas terminer notre boucle avec un
else qui va une nouvelle fois gérer tous les autres cas.
Fonctionnement :
Exemple :
Dans cet exemple, nous allons faire notre test sur 3 conditions représentées par
3 objets : Pomme, papaye, Citron.
Ainsi pour chaque objet choisi, PowerShell donne la réponse appropriée en
exécutant le bloc d’instruction correspondant au fruit choisit.
Si aucun fruit ne correspond, c’est la clause Else qui est appelée.
Nous avons introduit la commande clear-host en début de ligne pour effacer l’écran
avant l’exécution du code.
EXERCICE 1 :
Ecrire un script qui permet d’afficher les fichiers ou dossiers du répertoire
Windows qui ont été créés après une certaine date. L’utilisateur doit fournir la date sur
demande du script.
EXERCICE 2 :
Ecrire un script qui permet d’afficher tous les fichiers ou dossiers du répertoire
Windows qui ont été créés après une certaine date.
L’utilisateur doit fournir la date sur demande du script.
- Si l’utilisateur saisit un format de date valide alors PowerShell recherche
les fichiers correspondant à la date et les affiche dans la console.
- Si l’utilisateur saisit un format de date incorrecte PowerShell doit signaler
à l’utilisateur que la date n’est pas valide et arrêter le Script.
- Si l’utilisateur saisit une chaine de caractères qui n’est pas une date, alors
PowerShell doit le signaler à l’utilisateur et arrêter le Script.
EXERCICE 3 :
Ecrire un script qui permet d’afficher tous les fichiers ou dossiers Windows qui ont
été créés après une certaine date.
L’utilisateur doit fournir la date sur demande du script.
- Si l’utilisateur saisit un format de date valide alors PowerShell recherche
les fichiers correspondant à la date et les affiche dans la console.
- Si le format de date est valide mais qu’aucun fichier ou dossier ne
correspond à la date alors PowerShell doit le signaler à l’usager.
- Si l’utilisateur saisit un format de date incorrecte PowerShell doit signaler
à l’utilisateur que la date n’est pas valide et arrêter le Script.
- Si l’utilisateur saisit une chaine de caractères qui n’est pas une date, alors
PowerShell doit le signaler à l’utilisateur et arrêter le Script.
EXERCICE 4 :
Ecrire un script permettant d’obtenir tous les utilisateurs Active directory dont
la première connexion est supérieure à 90 jours afin de verrouiller leur compte
pour des raisons de sécurité. Etre proactif n’a jamais fait de mal à personne,
alors nous ajouterons l’envoi d’un email automatique au help desk (assistance)
pour les informer de cette désactivation.
Pour lister les utilisateurs concernés, vous pouvez utiliser la cmdlet Search-
ADAccount suivie de plusieurs paramètres :
Accountlnactive : recherche les comptes qui ne sont pas connectés depuis une
certaine période.
$LockedAccount=Search-ADAccount–UsersOnly–Accountlnactive
–TimeSpan