Vous êtes sur la page 1sur 17

1

Scripting Linux et PowerShell

UE: SCRIPTING LINUX ET


POWERSHELL

PARTIE 1: SCRIPT POWERSHELL

Module 1: Historique, découverte et avantage des Scripts


Module 2 : Prise en main de PowerShell : Quelques commandes
Module 3 : Objets, Variables Constantes et les types de données
Module 4 : Opérations sur les variables
Module 5 : Etudes des opérateurs et des tableaux
Module 6 : Etude des Boucles et des structures conditionnelles
Module 7 : Mise en situation

Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
2
Scripting Linux et PowerShell

MODULE 1 : HISTORIQUE, DECOUVERTES ET AVANTAGES DES SCRIPTS

1. Qu’est-ce qu’un Script ?

Un script est un fichier texte contenant une série de commandes à exécuter.


Ces commandes sont exécutées de façon séquentielle, c’est à dire les unes après les
autres. Derrière chaque commande se trouve un programme.
Le Script spécifie donc une suite de programmes à exécuter dans un ordre donné.
Un langage de scripts quant à lui permet d’écrire des scripts.
Les langages de Script les plus connus sont :
- Les langages de Scripts Shell GNU/Linux et UNIX :
Sh, bash, ksh(Korn Shell),csh(C Shell), etc
- JavaScript
- VBScripts
- Perl
- Ruby
- …….
- Et PowerShell qui représente la dernière génération des langages de Scripts

2. Pourquoi utilise-t-on les Scripts ?

Les Scripts sont utilisés à différents niveaux :

Coté Système d’Exploitation: Ils sont utilisés pour automatiser des taches
d’administration.

Coté Serveurs Web: Ils sont utilisés pour la génération des pages
Dynamiques (PHP, ASP, ASP.NET).

Coté navigateurs Web: Ils sont utilisés sous forme d’Aplet


d’automatisation.

Coté interface graphique: Ils sont utilisés pour simuler le déplacement


de souris et des pressions de touches sur le Clavier.
Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
3
Scripting Linux et PowerShell

Dans le cadre de cette formation, nous allons les utiliser pour l’automatisation des
taches d’administration.

3. Historique des langages de Scripts et de PowerShell

Tout commence en 1968 avec l’apparition du système d’exploitation UNIX sous


lequel sont apparus les premiers environnements d’exécution de scripts appelés
Shell. Les plus connus de ces environnements sont :
- Le Bourne Shell (sh), C shell (csh), le Korn Shell (ksh), le Bash Shell, etc

Ainsi tous les scripts développés pour ces environnements seront


appelés des scripts Shell qui sont encore aujourd’hui utilisés pour
l’Administration des Systèmes UNIX/Linux.
En 1981 Microsoft publie la version 1.0 du MSDOS avec les premiers scripts batch
(fichiers à extension. batch contenant une succession de commandes MS-DOS)
qui sont encore utilisés aujourd’hui pour la réalisation de taches simples
d’administration systèmes Windows.
En 1987 est lancé la version 1.0 du langage PERL (Practical Extraction and
Report Language), développé par Larry Wall, pour les plates-formes Unix.
Ce langage a pour objectif la manipulation des fichiers, des données et des processus.
En 1995 apparaissent deux autres langages de script JavaScript et VBScript
qui vont très vite se répandre sur le Web pour rendre les sites Internet plus
dynamiques et plus vivants, ainsi que pour apporter davantage d’interactivité
aux pages HTML.
En 2006, face aux limites de Windows basé presque exclusivement sur
L’interface graphique, Microsoft sort PowerShell dans sa version 1.0

4. Avantages des langages de scripts par rapport aux langages de


programmation

Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
4
Scripting Linux et PowerShell

La différence entre un langage de script et un langage de programmation à proprement


parlé (comme C/C++, C#, Visual Basic, ou Delphi) tient au fait qu’un script n’est
pas compilé, c’est-à-dire qu’il n’est pas transformé en un binaire directement
exécutable par la machine, mais qu’il faut obligatoirement un interpréteur de
commandes appelé aussi « hôte de script » ou « shell » pour lancer le script.

Un des intérêts majeurs des scripts par rapport aux langages de programmation
classiques est qu’il faut peu d’instructions pour arriver à faire la même chose pour des
opérations similaires. La syntaxe est généralement simplifiée et la programmation
moins contraignante. De plus, le code source d’un script est toujours accessible.

En claire les scripts permettent donc :


 UN gain de temps
 De limiter les erreurs
 Plus de flexibilité

MODULE 2 : PRISE EN MAIN DE POWERSHELL : QUELQUES COMMANDES

1- Présentation de Microsoft Windows PowerShell

PowerShell anciennement appelé Microsoft Command Shell (MSH) est à la fois un


interpréteur de commandes et un puissant langage de scripts.
Il tire sa puissance en grande partie du Framework .NET sur lequel il s’appuie. Mais
qu’est-ce que Framework .NET ?
Bien connue des développeurs c’est une énorme bibliothèque de classes à
partir de laquelle nous allons fabriquer des Objets.
Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
5
Scripting Linux et PowerShell

Ces objets nous permettront d’agir sur l’ensemble du système d’exploitation en


un minimum d’effort.

- Classe : Une classe représente une catégorie d’Objets. Elle apparaît aussi
comme un moule ou une usine à partir de laquelle il est possible de créer
des objets ; c'est en quelque sorte une « boîte à outils » qui permet de
fabriquer des Objets. Les Objets de la Classe possèdent les propriétés de la
classe.
- Objets : C’est un conteneur qui contient des informations et des
mécanismes.il hérite son comportement et ses caractéristiques de la
classe qui a permis de le créer.
D’autre part, PowerShell est fourni avec un jeu de commandes extrêmement
riche qui ne cesse de croître à chaque nouvelle version. Dès la version 3, on
dénombrait déjà environ douze fois plus de commandes que celles présentes
dans l’interpréteur CMD.exe. Néanmoins il faut noter que les commandes Dos
sont toujours utilisables dans PowerShell.

Enfin, sachez qu’il existe une aide en ligne intégrée à la console que vous pouvez
solliciter à tout moment et qui est très complète.

Tous les points que nous venons de vous exposer font de PowerShell un langage
de script très puissant mais surtout facile à apprendre, y compris pour ceux qui
n’ont jamais touché à la programmation.

2- Historique des versions

Entre 2003-2004: Microsoft prend conscience qu’il lui manque un véritable langage
de script homogène qui permettrait d’administrer entièrement l’ensemble de ses
Systèmes en lignes de commandes.
En 2006 le projet Monad a donc donné naissance fin 2006 à la première version de
PowerShell. En termes de fonctionnalités apparues au fil des années nous avons :
 Version 1 : fonctionnalités initiales.
Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
6
Scripting Linux et PowerShell

 Version 2 : fonctions avancées, aide intégrée, PowerShell ISE (Integrated Scripting


Environnent : Console de création de Scripts).
 Version 3 : PowerShell ISE amélioré, auto complétion améliorée, aide non incluse
mais à télécharger, meilleures performances, syntaxe simplifiée.
 Version 4 : système de mise à jour de l’aide amélioré, PowerShell ISE amélioré.
 Version 5 : Gestion des paquets pour les modules PowerShell, gestion des
applications installées, PowerShell ISE amélioré.
 Version 6 et 7

NB : Le nombre de commandes a considérablement progressé. Nous sommes passés


de 129 commandes dans la version 1 à plus du double dans la seconde. Aujourd'hui le
nombre de commande est presqu’incalculable.
Avant d’utiliser PowerShell sur les versions citées ci-dessus, il vous faudra vous
acquitter de deux opérations.
 La première, impérative, est de vérifier la version du Framework .NET
installée, et de faire au besoin une mise à jour vers les autres versions
plus récentes.
 Installer PowerShell au travers de Windows Management Framework.
C’est un ensemble de logiciel qui contient les Mise à jour de PowerShell.

Il est à noter que quel que soit la Version du Système d’exploitation,


PowerShell s’installe toujours dans le dossier :
C:\Windows\System32\WindowsPowerShell\v1.0

3- Démarrage de la console

Lorsque l’on démarre la console PowerShell, il faut savoir que cette dernière
s’exécute avec des droits de simple utilisateur et donc limité ; et ce, même si l’on a
ouvert notre session avec un compte administrateur. Ne soyez donc pas surpris si
vous vous voyez l’accès refusé à certains répertoires, à certaines clés de registre ou
à certaines commandes.
Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
7
Scripting Linux et PowerShell

Pour ouvrir une console classique ou graphique (ISE) avec le privilège


Administrateur, vous devez systématiquement effectuer un clic droit sur l’icône
PowerShell (ou PowerShell ISE) et choisir Exécuter en tant
qu’administrateur (ou Run as Administrator sur un système en anglais) comme ci-
après.

Voici la différence entre 2 fenêtres ouvertes en tant qu’Administrateur et sans droits


d’Administrateur.

4- La console classique

A première vue, c’est difficile de faire la différence entre la fenêtre PowerShell et la


fenêtre CMD de MS-DOS.

La seule différence majeure c’est la couleur de fond bleue pour PowerShell et noire
pour CMD.

Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
8
Scripting Linux et PowerShell

Pour connaitre la version de ton PowerShell, deux commandes sont disponibles :


 Get-host
 $PSVersionTable

5- L’Environnement ISE

ISE est une abréviation d’Integrated Scripting Environnent en français,


Environnement intégré de Scripts.
L’ISE est un éditeur de scripts en mode graphique livré avec PowerShell !
C’est un environnement très convivial de création de scripts, grâce à une
coloration syntaxique, l’affichage des numéros de lignes, le débogueur,
l’exécution pas à pas, l’aide en ligne en mode graphique, etc…

Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
9
Scripting Linux et PowerShell

6- Architecture des commandes

Les commandes PowerShell sont appelées cmdlets (pour command-applets : Se


lisant commande lettes).
Rappel : Une applet est de façon générale un script qui, compilé sur le serveur, est
chargé par le navigateur pour augmenter l'interactivité et les fonctionnalités.
Elles sont constituées de la manière suivante :
Un verbe et un Nom séparés par un tiret (-) : verbe-nom.
Prenons l’exemple de : Get-Host : la commande qui nous a permis de connaitre la
version de notre PowerShell.
Get : verbe qui signifie obtenir, avoir.
Host : Nom qui signifie Hôte pour indiquer, un serveur, une machine.
Donc dans l’architecture de PowerShell, le verbe décrit l’action à appliquer sur le
nom. Voyons l’exemple des commandes suivantes :
 Get-Host
Permet donc d’obtenir des informations sur la version de PowerShell
exécuté sur l’hôte, mais aussi permet d’obtenir plusieurs informations sur
l’interface utilisateur.
 Get-ChildItem
Permet de lister les éléments d'un ou de plusieurs emplacements
spécifiés. Si l'élément est un dossier, elle liste les éléments qui se trouvent
à l'intérieur du dossier, appelés éléments enfants.
Vous pouvez utiliser le paramètre Recurse qui permet d’obtenir les
éléments contenus dans tous les dossiers enfants.
 Get-Alias
Qui permet d’obtenir la liste des alias

Ainsi dans PowerShell de nombreux verbes génériques tels que Get, Set, Add,
Remove, etc. se combinent avec différents noms comme Path, Variable, Item,
Object, Computer, etc.
Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
10
Scripting Linux et PowerShell

On peut donc, en combinant les verbes et les noms, se souvenir facilement


de beaucoup de commandes.
Notez que les commandes, ainsi que leurs paramètres associés, peuvent s’écrire en
majuscules ou en minuscules, car PowerShell n’est absolument pas sensible à la casse.

7- La commande Get-Command

Si d’aventure vos capacités mémoire sont telles qu’il est difficile pour vous de retenir quoi
que ce soit, je vous conseille au moins de ne retenir que cette commande.
Car elle permet de découvrir toutes les autres commande s PowerShell.
Lorsqu’elle est exécutée sans paramètre elle retourne tout, c-à-d. en plus des
commandes elle liste également les Alias, les fonctions, etc.
Exemple1 : A f f i c h o n s uniquement les Commande lette en ajoutant:
-CommandType : Paramètre qui permet de préciser le type de commande à afficher.
Cmdlet : suivi du type de commande.
Get-Command –CommandType Cmdlet
Exemple2 : Nous allons également afficher toutes les commandes dont le verbe est
Write qui signifie écrire en utilisant le paramètre -Verb
Get-Command –Verb Write
Comme expliqué plus haut Nous pouvons aussi obtenir des commandes d’un certain
type, dont les plus utilisées sont : alias, function, cmdlet, externalscript, application,
etc.
Exemple3 : Affichons seulement les Alias
Get-Command –CommandType Alias
Exemple4
Si vous êtes à la recherche d’une commande dont vous ignorez le nom, mais si
vous savez (ou supposez) que la commande doit vous fournir de l’information, il est
fort possible qu’elle commence par le verbe Get. Dans ces conditions, vous pouvez
faire ceci :
Get-Command Get* ou Get-Command Get-*

Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
11
Scripting Linux et PowerShell

Exemple5 On peut également rechercher les commandes qui s’appliquent à


des ordinateurs :
Get-Command *-Computer

8- La commande Get-Help

Il existe trois niveaux d’aide dans PowerShell :


 L’aide standard, (Sans paramètre derrière la commande)
 L’aide détaillée, (Ajouter le paramètre –Detailed derrière la commande)
 L’aide complète, (Ajouter le paramètre –Full derrière la commande)
Pour demander de l’aide sur une commande, vous pouvez le faire de différentes
façons :
 Get-Help la commande
 Help la commande
 La commande - ?
Exemple:
 Demandons une aide Standard pour la commande Get-Item
Help Get-Item
 Demandons une aide détaillée pour la commande Get-Item
Help –detailed Get-Item
Ici nous avons en plus, les Paramètres de la commande et des exemples
 Demandons une aide Complète pour la commande Get-Item
Help –full Get-Item
Ici nous avons en plus, les entrées et les Sorties qui s’ajoutent.

NB : Faire les recherches sur l’aide en ligne et l’aide conceptuelle

9- La commande Get-ChildItem (Alias : gci, dir, ls)

Cette commande permet d’obtenir les fichiers et dossiers présents dans un


dossier.
Exemple 1
Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
12
Scripting Linux et PowerShell

Lister le contenu du dossier c:\windows


Get-Childitem c:\Windows

Au premier regard, ce qui attire l’œil, c’est le nom donné à chaque colonne ;
mais intéressons-nous à la colonne Mode.
Celle-ci indique la nature des objets à l’intérieur du système de fichiers. Voici les
valeurs possibles :

 d : pour un répertoire.
 a : pour une archive.
 r : pour un objet en lecture seule.
 h : pour un objet caché.
 s : pour un objet système.

Exemple 2
Pour afficher les fichiers cachés, ajoutez à la commande Get-Childitem le
paramètre -Force.
Get-Childitem c:\Windows –Force
Exemple 5
Afficher les fichiers dont la taille est supérieure à 32 Ko :
Get-ChildItem C:\Windows | Where-Object {$_.Length -gt 32KB}
| : Le Pipe, est un filtre qui permet de récupérer chaque objet pour l’appliquer à
l’instruction Where-Object donc à la commande qui suit.
$_ : indique qu’on traite l’objet courant
Length : C’est la propriété Lenght, la colonne lenght qui est traitée
-gt Opérateur qui signifie supérieur à 32 kb.

10- Manipulation des fichiers et des répertoires avec les commandes Get-
Childitem, Set-location, Get-location, New-item, Remove-Item, Move-
Item, Rename-Item et copy-item
Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
13
Scripting Linux et PowerShell

 Les attributs des fichiers et des dossiers

Un attribut est une propriété spéciale d’un fichier ou dossier qui définit sa
nature. Depuis PowerShell 3.0, cinq attributs sont présents.

 Directory: pour un répertoire.


 Archive: pour une archive.
 Hidden : pour un objet caché.
 ReadOnly : pour lecture seule.
 System : pour objet système.
On les utilise comme suit :
Get-ChildItem -Attributes attribut_choisi
Exemple 1
Afficher tous les fichiers ou répertoires cachés à la racine de la partition
système C:\
Get-ChildItem C:\ -Attributes Hidden
On peut aussi associer des combinaisons d’attributs avec les opérateurs que
voici :

 + : pour signifier un ET logique.


 , : pour signifier un OU logique.
 ! : Pour signifier une négation : ne pas ou n’est pas
Exemple 2
Afficher uniquement les fichiers cachés et non les répertoires, nous allons donc
combiner les attributs « caché » et « n’est pas un répertoire ».
Get-ChildItem C:\ -Attributes Hidden+!Directory

 La commande Set-Location (Alias: sl, cd, chdir)

Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
14
Scripting Linux et PowerShell

Cette commande nous permet de nous déplacer dans une arborescence de


dossiers. Evidemment vous pouvez utiliser des chemins relatifs ainsi que les
raccourcis «..» et « \ », pour désigner respectivement le répertoire parent et le
répertoire racine du disque en cours.

Exemple 1
Etant dans le dossier C:\Users\Administrateur> je voudrais aller à la racine de
mon disque C
Set-Location C:\
 La commande Get-Location (Alias : gl, pwd)

Cette commande affiche l’emplacement où vous vous trouvez à l’intérieur


d’une arborescence.

Exemple 1
Afficher le chemin de l’emplacement dans lequel je me trouve
Get-Location

 La commande New-Item (Alias : ni, md)

Cette commande permet de créer des répertoires mais aussi des fichiers. Voici
quelques un de ses paramètres.

Paramètre Description
-Path Chemin d’accès de l’élément à créer (ex : C:\test).
-Itemtype Type d’élément à créer : file pour un fichier, directory
Pour un dossier.
-Name Nom du nouvel élément à créer.
-Value Contenu de l’élément à créer (ex : "Salut les gars !"
dans le cas d’un fichier texte).

Exemple 1

Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
15
Scripting Linux et PowerShell

Créons le Répertoire SKILLS à la racine du disque c:\


New-Item C:\ -ItemType directory -Name SKILLS
Attention : Si le nom du dossier contient un espace il faut le mettre entre griffe
Exemple : 'Fiche de Paie'
Exemple 2
Nous allons créer un fichier nommé Fiche.txt dans le dossier SKILLS et qui
contient la phrase « Bienvenue sur Skills-Technet »
New-Item c:\SKILLS –Name Fiche.txt -ItemType file -Value
’Bienvenue sur Skills-Technet !’

 La commande Remove-Item (Alias : ri, rm,rmdir,rd, erase,del)

Remove-Item, permet de supprimer des fichiers ou des dossiers.


Elle peut être utilisée de plusieurs manières :
Exemple 1
Supprimer tous les fichiers .txt qui se trouvent dans le dossier
C:\SKILLS
Remove-Item C:\SKILLS\*.txt
Exemple 2
Cet exemple nous permet de supprimer sélectivement tous les fichiers contenus
dans une arborescence de dossiers dont l’extension est .txt. Cette syntaxe est
très pratique car on peut la construire petit à petit ; on liste d’abord les fichiers
à supprimer, puis on les passe via le pipe à la commande Remove-Item qui se
charge de les supprimer.
Get-ChildItem C:\Temp\* -Include *.txt -Recurse | Remove-Item
Exemple 3
Le paramètre -force permet de supprimer un fichier système, masqué ou en
lecture seule,
Remove-Item fichierSysteme.txt –Force

Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
16
Scripting Linux et PowerShell

Remove-Item possède aussi le paramètre -whatif ; celui-ci indique ce que va


faire la commande mais sans l’exécuter. C’est en quelque sorte un mode
simulation.
Un autre paramètre intéressant est -confirm. Grâce à lui, PowerShell demande
une confirmation pour chaque fichier à supprimer, ce qui n’est pas le cas par
défaut.
Exemple 4
Nous allons simuler la suppression de tous les fichiers .log qui se trouvent dans
le dossier Windows
Remove-Item C:\windows\*.log -whatif
Exemple 5
Nous allons demander confirmation avant suppression des fichiers log dans le
dossier Windows :
Remove-Item C:\windows\*.log -confirm

 La commande Move-Item (Alias : mi, move, mv)


Cette commande permet de déplacer un fichier ou un répertoire d’un
emplacement vers un autre ou les renommer. Dans le cas d’un répertoire, le
contenu est également déplacé. Move-Item permet aussi de renommer des
objets.

Exemple 1
Déplacez tous les fichiers .txt contenus dans le dossier C:\SKILLS vers C:\TXT

Move-Item -Path C:\SKILLS\*.txt -destination C:\TXT

Exemple 2
Déplacer le fichier fiche2018.txt qui se trouve dans SKILLS vers le dossier
C:\COMPTE et le renommer en fiche2019

Move-Item -Path C:\SKILLS\fiche2018.txt -destination C:\COMPTE\fiche2019.txt


Présenté et rédigé par SDU

68=<',*,7$/81,9(56(
17
Scripting Linux et PowerShell

 La commande Rename-Item
Cette commande permet de renommer un fichier ou un dossier. Celle-ci n’est
que moyennement utile dans la mesure où elle fait double emploi avec sa
cousine Move-Item. Ceci étant, il y a peut-être certains cas, que nous ne
connaissons pas encore, dans lesquels elle trouverait son utilité… Peut-être pour
éviter de confondre renommage et déplacement comme dans l’exemple
précédent.
Exemple 1
Nous allons renommer le dossier C:\SKILLS en C:\SKILLS2018

Rename-Item -Path C:\SKILLS -Newname SKILLS2018

 La commande Copy-Item (Alias :cpi, cp, copy)


Permet de copier des fichiers ou des répertoires, ou les deux à la fois.
Exemple 1
Copier tous les fichiers *txt du dossier C:\SKILLS vers C:\SKILLS2018

Copy-Item -Path C:\SKILLS\*.txt -destination C:\SKILLS2018

Le paramètre –Recurse permet de copier les sous répertoires et leurs contenus.

Exemple 2

Copier tous les fichiers *log du dossier C:\WINDOWS vers C:\SKILLS2018

Copy-Item -Path C:\WINDOWS\*.log -destination C:\ SKILLS2018 – Recurse

Présenté et rédigé par SDU

68=<',*,7$/81,9(56(

Vous aimerez peut-être aussi