Sisr4 05 tp1 Pws Niveau 2
Sisr4 05 tp1 Pws Niveau 2
Sisr4 05 tp1 Pws Niveau 2
309927968.odt
Page : 1/12
Introduction
Ce 2 TP va nous permettre d'introduire les bases du scripting. A l'issue de ce TP, vous saurez :
utiliser PowerShell-ise :
Charger un script
excuter un script
dchiffrer un script
Bases du Scripting
2.1
Powershell ise
Aller dans dmarrer > tous les programmes > accessoires > powershell et slectionnez powershell ISE.
Vous obtenez l'cran suivant :
309927968.odt
Page : 2/12
1. Contient l'ensemble des scripts que vous tes en train de modifier. Il y a un onglet par script.
2. C'est la fentre dans laquelle vous pouvez frapper des commandes powershell de manire unitaire.
Vous pouvez aussi provoquer, dans cette fentre, le dmarrage du script. Elle se comporte un peu
comme la fentre de commandes PowerShell que nous avons dj utilise.
3. Contient la liste des commandes et une aide pour chacune d'entre elles. Vous pouvez slectionner
le module puis cliquer sur une commande pour obtenir des explications sur les paramtres.
2.2
Par dfaut, l'excution de scripts est interdit dans PowerShell. Pour vous en convaincre, frappez dans la
fentre 2 de powershell ISE la commande suivante :
get-executionPolicy
Donner le rsultat que vous obtenez :
Restricted
Il faut modifier la politique d'excution. Dans la fentre 2 de powershell ise frappez
set-executionPolicy -executionPolicy remoteSigned -scope localMachine
PowerShell va vous demander de valider ce choix.
Dcrivez quels sont vos nouveaux droits avec cette politique d'excution. Quels sont les scripts que vous
pouvez utiliser ?
.RemoteSigned
309927968.odt
Page : 3/12
3.1
Texte du script
Voici le premier script que nous allons tudier. Il permet de calculer le volume occup par un dossier sur le
disque dur.
1
<#------------------------------------------------------------------
Auteur BD 17/12/2013
--------------------------------------------------------------------#>
$cherche = $args[0]
$dossier = $args[1]
10
3.2
Excuter ce script
309927968.odt
Page : 4/12
3.3
Analyser ce script
Comment procde ce script ?
C:\windows
Nom du script
1 Paramtres du script.
2 paramtre du script
$arg[0]
$arg[1]
309927968.odt
Page : 5/12
3.4
Amliorer le script
Ce script fonctionne, mais le rsultat obtenu est parfaitement hideux. Pour amliorer cela, nous allons
procder deux manipulations : la premire va nous permettre d'viter l'affichage des messages d'erreur
signalant que des dossiers sont inaccessibles, la deuxime va nous permettre de n'afficher que le nom du
dossier qui contient le fichier que nous cherchons.
Ralisez cette modification, sauvegardez le script et rexcutez le. Donnez ici le rsultat que vous obtenez :
Recherche du fichier hosts dans le dossier c:\scripts
Ralisez cette modification, sauvegardez le script et rexcutez le. Donnez ici le rsultat que vous obtenez :
Recherche du fichier hosts dans le dossier c:\windows
le fichier hosts est dans C:\windows\System32\drivers\etc
le fichier hosts est dans C:\windows\WinSxS\amd64_microsoft-windows-w..ucture-ot
her-minwin_31bf3856ad364e35_10.0.10586.0_none_c1c535cf0f692563
3.5
Rsum
Nous avons vu une technique de base nous permettant de faire trs simplement des actions sur un grand
nombre d'objets :
where-object permet de filtrer uniquement les objets sur lesquels nous souhaitons avoir une action.
ForEach permet de mettre en place une action spcifique sur chaque objet.
Exercice
Rajoutez les instructions permettant de compter le nombre de dossiers qui contient ce fichier.
309927968.odt
Page : 6/12
Script n 2
5.1
Analyse du script
<#-------------------------------------------------------------------
Auteur BD 17/12/2013
---------------------------------------------------------------------#>
$dossier = $args[0]
? {$_.PsisContainer -eq 0} |
Measure-Object -property Length -Sum | `
ForEach-Object {
10
11
12
13
NB : la commande measure-object permet de calculer le total (ou la somme) d'une des proprits d'un objet.
Ici, elle permet de calculer le total de la proprit Lentgh qui contient le volume des donnes de chaque
fichier en octets.
Indiquez ce que fait ce script. Donnez un aperu du rsultat qu'il fournit.
309927968.odt
Page : 7/12
Donnez le numro des instructions qui sont excutes dans ForEach ? Qu'est ce qui vous amne cette
conclusion ?
11 et 12, car situes entres crochets,
Dans quelle unit est donn le rsultat ? Quelle est l'instruction qui permet de le convertir dans cette unit ?
En Megabytes ; {0:#,##0,0}
A quoi sert le paramtre foregroundColor dans l'instruction write-host ?
A dfinir une couleur d'affichage d'une phrase,
A l'aide d'une recherche Internet sur Google, expliquez l'expression {0:#,##0.0}
MB
dans
l'instruction write-host
http://technet.microsoft.com/en-us/library/ee692795.aspx
5.2
Modifications du script
Eviter l'affichage des messages d'erreur
Script n 3
6.1
Conditions et boucles
Avec powerShell, on peut aussi faire des tests et des boucles. Les conditions permettent d'excuter une
partie des instructions d'un script ou une autre partie en fonction d'une condition donne. Une boucle permet
de rpter plusieurs fois une suite d'instructions.
Copier/coller le script suivant :
1
<#-------------------------------------------------------------------
309927968.odt
Page : 8/12
Auteur BD 18/12/2013
---------------------------------------------------------------------#>
6.2
Condition
Ce script ne fonctionne qu'avec une liste bien prcise de couleurs. Pour amliorer le fonctionnement de ce
script, nous allons le modifier pour viter ce message d'erreur chaque fois que l'utilisateur frappe une
mauvaise couleur.
Tout d'abord, nous allons mettre la liste des couleurs en place. Aprs la ligne 4 du script, nous allons frapper
l'instruction suivante
$listeCouleurs
@("Black","DarkBlue","DarkGreen","DarkCyan","DarkRed","DarkMagenta","DarkYellow"
,"Gray","DarkGray","Blue","Green","Cyan","Red","Magenta","Yellow","White")
Le caractre @ spcifie que ce qui suit est une liste d'lments tous semblables.
Ensuite, nous allons mettre en place un systme afin de d'assurer que la couleur frappe est bien dans la
liste. Nous allons utiliser un filtre, que nous allons placer aprs la dernire ligne :
$z = $listeCouleurs | where-object {$_ -match $couleur}
A l'issue de cette instruction, $z contiendra le nom de la couleur si le filtre a russi ou rien si le filtre a
chou, c'est dire si la couleur choisie n'existe pas dans la liste. Notez l'oprateur de comparaison match qui permet d'viter les majuscules et les minuscules.
Nous allons maintenant introduire une condition et frapper les instructions suivantes, en remplacement de
l'instruction n 7 :
if ($z -ne $null) {
Write-Host -ForegroundColor $couleur ("vous avez demand crire en "+
$couleur)
}
else {
write-host ("la couleur "+$couleur+" n existe pas.")
}
Expliquez en langage naturel ce que fait cette suite d'instructions
Il ne vous reste plus qu' enregistrer le script modifi et vrifier son bon fonctionnement en lanant son
excution.
309927968.odt
Page : 9/12
6.3
Boucle
Le problme, dans ce script, est que sitt qu'une couleur a t frappe, il faut le relancer. Pour viter cela,
nous allons mettre en place un systme pour qu'il se rpte jusqu' ce que l'oprateur dcide d'arrter. Pour
cela nous allons utiliser une boucle while .
Introduisez, aprs la ligne n 5 (celle qui dclare la liste des couleurs) l'instruction suivante :
while ($couleur -ne 'stop') {
puis frappez, tout fait la fin du script, l'instruction suivante :
}
Expliquez, en langage naturel, ce que vous avez fait
7.1
Introduction
On a rcupr la liste des employs de la Sodecaf dans un fichier CSV. Un fichier CSV se prsente comme
une liste d'lments spars par un caractre qui peut tre un point virgule (;), une virgule (,) ou tout autre
caractre. Le plus utilis est le point-virgule. Par exemple :
Chaque ligne contient donc un ensemble d'lments qui ont la mme signification. C'est souvent sur la
premire ligne du fichier (mais ce n'est pas toujours le cas) qu'on trouve la signification de chacun des
lments constituants une ligne. Par exemple :
Les lments constituants chaque ligne sont souvent appels des champs ou encore des zones .
Vous pouvez facilement visualiser un fichier .csv avec un utilitaire de type notePad ou notePad++.
Nous allons crer un script qui va nous permettre de faire plusieurs traitements sur ce fichier. Nous allons
successivement :
Crer un dossier par agence, puis un sous-dossier par personne. Le nom du sous dossier
309927968.odt
Page : 10/12
contiendra le prfixe fic_ suivi du trigramme de la personne (1 lettre du prnom, 1 lettre du nom et
dernire lettre du nom).
Pour commencer crez un dossier tp_csv. Copiez le fichier utilisateurs sodecaf.csv dedans. Ouvrez
powershell.ise et positionnez vous dans ce dossier.
7.2
Pour ouvrir le fichier, nous allons utiliser la commande import-csv ou ipcsv en abrg :
ipcsv ".\utilisateurs sodecaf.csv" -Delimiter ";"
Comment apparat le contenu du fichier CSV ?
Frappez maintenant :
ipcsv ".\utilisateurs sodecaf.csv" -Delimiter ";" | format-table
Quelle est la diffrence avec l'instruction prcdente ?
Nous allons maintenant placer un filtre sur la fichier .csv. Frappez l'instruction suivante
ipcsv ".\utilisateurs sodecaf.csv" -Delimiter ";" | where {$_.function -match
"informatique"} | format-table
Que contient maintenant la liste qui vous apparat l'cran ?
Nous voulons maintenant uniquement faire apparatre le nom, le prnom, le trigramme et le n de tlphone
des employs. Frappez l'instruction suivante
ipcsv ".\utilisateurs sodecaf.csv" -Delimiter ";" | foreach {
$triGramme=$_.firstname.substring(0,1)+$_.lastname.substring(0,1)
$triGramme = $triGramme + $_.lastname.substring($_.lastname.length-1,1)
$trigramme = $triGramme.toUpper()
Write-Host ($_.firstname+" "+$_.lastname+" ("+$triGramme+") "+$_.phone1)
}
Expliquez comment est constitu le trigramme de chaque personne
7.3
Exercice 1
Faites un script qui lit ce fichier et affiche le prnom, le nom, le trigramme et le tlphone avec une couleur
diffrente selon le service (champ function ).
309927968.odt
Page : 11/12
Mettez ici le contenu du script que vous avez ralis. Montrez les rsultats obtenus.
7.4
Exercice 2
Faites un script qui lit le fichier des utilisateurs de la SODECAF et qui cre un rpertoire pour chaque
agence, puis un dossier pour chaque personne l'intrieur du rpertoire de l'agence. Le rpertoire de
l'agence aura pour nom, le nom de l'agence. Le rpertoire de chaque personne sera appel fic_ suivi du
trigramme de la personne. Par exemple, pour Bernard Ducasse : fic_bde.
Pour crer un dossier, vous pouvez utiliser soit MKDIR soit NEW-ITEM.
Mettez ici le contenu du script que vous avez ralis. Montrez les rsultats obtenus.
309927968.odt
Page : 12/12