Vous êtes sur la page 1sur 17

Dcouverte de PowerShell

PowerShell- Tutoriel

Microsoft France Division DPE

Table des matires


Prsentation ................................................................
................................................................................................
........................................................ 2
Objectifs ................................................................
................................................................................................
.............................................................. 2
Prrequis ................................................................
................................................................................................
............................................................. 2
Exercice 1: Utilisation de Windows PowerShell ISE................................................................
............................................................... 3
Tche 1 Lancement de PowerShell ISE................................................................................................
........................................... 3
Tche 2 Excution de commandes ................................................................................................
................................................ 4
Exercice 2 : Ecriture de scripts................................
................................................................................................
.............................................................. 7
Tche 1 : Autoriser lexcution de scripts ................................................................
......................................................................... 7
Tche 2 : Ecriture dun script ................................................................................................
................................
............................................................ 9
Tche 3 : Le mode debug ................................................................................................
................................
............................................................... 10
Tche 4 : Aller plus loin dans lcriture de scripts ................................................................
........................................................... 11
Exercice 3 : Excution de commandes distantes................................................................
................................................................. 13
Tche 1 Configuration de laccs distant................................................................
distant
...................................................................... 13
Tche 2 : Gestion des informations de connexions ................................................................
......................................................... 15
Tche 3 Lancer une commande simple distance ................................................................
....................................................... 16
Ressources ................................................................
................................................................................................
........................................................ 17

Prsentation
Windows PowerShell est un interprteur de commande et un langage de script conu initialement pour la
gestion et ladministration des systmes dexploitation, et sert maintenant aussi pour ladministration de
certains produits serveurs tels que Microsoft Exchange Server 2007 ou Microsoft SQL Server 2008. Sa version 2.0
est disponible en standard dans Windows 7 et Windows Server 2008 R2, ou sous forme de mises jour
tlcharger pour Windows Vista et Windows Server 2008 (retrouvez le lien vers les tlchargements la fin du
tutoriel dans les ressources).
Son utilisation passe par lappel de cmdlets, ou applets de commande, qui permettent dinteragir avec le
systme, de la manipulation de fichiers ldition de la base de registre en passant par le suivi des processus ou
des services de lordinateur.
De plus, contrairement dautres shells , PowerShell vous donne rellement accs des objets et permet
ainsi des scnarios plus pousss puisque ces objets pourront leur tour proposer leurs proprits et mthodes.
PowerShell est bas sur le Framework .Net : vous pourrez appeler les API .Net directement depuis vos scripts.
Ainsi, si vous tes dj dveloppeur, vous pourrez capitaliser sur vos connaissances. Pour finir, sachez que
PowerShell nest pas sensible la casse, autrement dit il ny a pas de diffrence entre les miniscules et les
majuscules.

Objectifs
Dans ce tutoriel, vous apprendrez :

Utiliser lenvironnement intgr de script PowerShell (ISE)


Crer vos propres scripts
Lancer des commandes sur une machine distante

Prrequis
Pour complter ce tutoriel vous devez avoir :

Microsoft Windows 7

Exercice 1: Utilisation de Windows PowerShell ISE


Une des
es nouveauts de PowerShell 2.0 est lapparition dun environnement de dveloppement, ou plus
exactement dcriture de script, ISE signifiant Integrated Scripting Environnement . Linterface classique en
ligne de commande continue dexister, mais lcriture et lutilisation de script
scriptss sont grandement simplifies
avec lISE.
Dans cet exercice vous allez dcouvrir cet environnement et y lancer quelques commandes.

Tche 1 Lancement de PowerShell ISE


1. Rendez-vous
vous dans le menu dmarrer / tous les programmes / Accessoires puis Windows
PowerShell . Si votre Windows est en 64
64-bit,
bit, vous remarquez la prsence de versions 32
32-bit (x86).

2. Lancez Windows PowerShell ISE . Vous obtenez alors un diteur graphique dcompos en 3 zones
principales :

(1) : Un diteur de texte pour crer ses propres fichiers de scripts (extension ps1 )
(2) : La zone daffichage du rsultat de lexcution des scripts et commandes
(3) : Le volet de commandes pour saisir directement comme dans le prompt classique

3. En bas droite de la fentre se trouvent les informations de position dans le texte (valable pour les 3 zones)
mais surtout un curseur permettant de jouer sur le redimensionnement des fentres en mode vectoriel.

4. Le menu principal vous propose les options


optio suivantes :
o Fichier : ouverture et sauvegarde de scripts, gestion donglets supplmentaires (en local ou
distance)) et le dmarrage de PowerShell en ligne de commande
o Modifier : dition de texte (copier, coller), recherche
o Afficher : organisation des diffrentes
diffrentes fentres et de la barre doutils et fonctions de zoom
o Dboguer: dbogage de vos scripts avec la gestion des points darrts et du mode pas pas. Nous
verrons en dtail ces options dans lexercice sur lcriture de scripts.
o Aide : accs laide PowerShell

Tche 2 Excution de commandes


Vous allez maintenant lancer quelques commandes PowerShell.
1. PowerShell possde un nombre important de commandes, et la premire tape est dapprendre les
dcouvrir. Pour cela, tapez la commande suivante :
PowerShell
Get-Command

La liste de toutes les commandes, alias et fonctions disponibles saffiche alors.

2. Pour filtrer le rsultat et rechercher une commande en particulier, il vous suffit d


de rajouter le filtre la suite,
le symbole * faisant office de Wildcard (nimporte quel caractre).
PowerShell
Get-Command *Process

Vous obtenez ainsi uniquement les cmdlets dont le nom finit par Process .

3. Laide est aussi videmment une fonctionnalit trs importante, et il ne faut pas hsiter en user et abuser.
Son utilisation est trs simple puisquil vous suffit de passer le nom de la commande pour obtenir sa
description, la liste de ses paramtres attendus...
attendus Vous disposez aussi de plusieurs options ((-examples, -full, detailed, ) pour obtenir encore plus dinformations ou des exemples concrets. Pour en savoir plus sur la
prcdente commande utilise, entrez le texte :
PowerShell
Get-Help Get-Process

4. Nhsitez pas non plus utiliser la touche tabulation pour bnficier de lauto-compltion.
compltion. Tapez par
exemple Get-c puis pressez p
plusieurs fois la touche Tab pour voir apparatre les diffrentes
possibilits.
5. Une
ne petite nouveaut de PowerShell 2.0 concerne lajout de la commande Out-GridView
Out
. Celle-ci permet
de gnrer une grille de donnes non plus en mode texte mais sous forme dapplication riche, avec en plus

la possibilit de trier et filtrer les lments :

Cliquez sur Ajouter des critres , choisissez ProcessName et svchost pour nafficher que ces
processus.
6. Depuis le volet de commandes, excutez la cmdlet suivante :
PowerShell
Get-ChildItem

La liste des fichiers et dossiers du rpertoire courant saffiche dans le volet. Cette commande permet de
rcuprer les lments fils dune structure, par exemple le systme de fichier.
7. En effet, mme si le parcours dans les rpertoires est une option commune, le systme de fournisseurs offre
dautres possibilits. Pour obtenir la liste des fournisseurs disponibles :
PowerShell
Get-PSProvider

8. Ainsi, vous pouvez consulter les cls de registre grce la mme commande que pour le systme de fichiers,
mais en utilisant le lecteur adquat.
PowerShell
cd HKLM:
cd .\System\CurrentControlSet\Services
Get-ChildItem

Remarque : vous pouvez ici aussi utiliser la compltion automatique avec la touche Tabulation.

Exercice 2 : Ecriture de scripts


Tche 1 : Autoriser lexcution de scripts
Un script est un fichier texte portant lextension ps1 comprenant des cmdlets et fonctions. Ce fichier peut
tre charg et excut et permettre ainsi dautomatiser des oprations rptitives.
Avant de pouvoir crire vos propres scripts, vous allez devoir autoriser leur excution sur votre poste. En effet,
PowerShell dispose de 4 modes dexcutions :

Restricted : aucun script ne peut tre excut, seules les cmdlets sont autorises
AllSigned : les scripts peuvent tre excuts mais ils doivent tre obligatoirement signs avec un
certificat
RemoteSigned : les scripts crs en local nont pas besoin de signature
Unrestricted : les scripts nont pas besoin dtre signs, quils proviennent du poste local ou dInternet.

Vous trouverez les informations ncessaires sur la signature de script via la commande get-help
about_signing .
Le niveau de scurit est par dfaut Restricted , il va falloir donc commencer par autoriser lexcution de
nos scripts locaux.

1. Relancez Windows PowerShell en mode administrateur : clic droit sur le raccourci et choisir Excuter en
tant quadministrateur .

2. Vrifiez la stratgie dexcution courante


courant en tapant dans le volet de commandes :
PowerShell
Get-ExecutionPolicy

Vous devriez obtenir ceci :

3. Entrez la commande Get-Process


Process dans la zone de script et sauvegardezz le fichier en tant que
Coach.ps1 .. Longlet porte le nom du fichier.

4. Pour excuter le script, cliquez


liquez sur la flche verte dans la barre doutils ou bien appuyez sur F5 . Une
erreur explique que lexcution de script est dsactive.
dsactive

5. Dans la zone de commandes, modifiez la stratgie dexcution en RemoteSigned


PowerShell
Set-ExecutionPolicy
ExecutionPolicy RemoteSigned

Une popup vous demandera confirmation, validez en cliquant sur Oui

Si la modification provoque une erreur, cela provient du fait que vous navez pas les droits suffisants
pour diter la base de registre. Vrifiez alors que vous avez bien lanc PowerShell en tant quadministrateur et
que vous avez les droits suffisants.

Tche 2 : Ecriture dun script


Maintenant que les scripts raliss sur le poste local peuvent tre excuts, vous allez pouvoir
po
crire un premier
script PowerShell plus avanc.
1. Vous pouvez relancer votre script qui cette fois-ci
fois fonctionnera parfaitement.
2. Le script nutilise pour linstant quune commande, or les scriptss sont plutt utiliss pour dfinir des
fonctions rutilisables plus complexes
complexes. Effacez le contenu du fichier et remplacez le par le code suivant :
PowerShell
function DisplayProcessInfo($processName)
DisplayProcessInfo($pro
{
Write-Host
Host "Affichage des processus contenant : $processName"
$p = Get-Process | Where-Object
Object { $_.Name -like "*$processName*"
$processName*" }
$p | Format-List
List Id, Name, Description, Product, VM, StartTime
}

Vous avez maintenant votre premire fonction DisplayProcessInfo . Elle prend en paramtre une chane de
caractre (variable $processName ) et affiche tous les processus dont le nom contient cette chane.
chane
Vous pouvez remarquer que cette variable est la fois utilise pour afficher laction
ion en cours (ligne WriteHost ) et pour filtrer la rcupration des processus grce la clause Where .. Le terme $_ situ entre les
crochets correspond llment de la liste rcupre
rcupre. On accde ainsi ses proprits,
proprit ici Name , pour
effectuer notre test. Ct oprateurs, outre le -like vous aurez les classiques -eq
eq (gal) -ne (diffrent)
, -gt (plus grand), -lt (plus petit) Pour plus dinformations sur le sujet, noubliez pas laide intgre :
PowerShell
Get-Help about_operators

Enfin, laffichage des processus est format sous forme de liste avec uniquement une certaines des proprits.
Vous pouvez remplacer toutes les proprits suivant
suivan Format-List par * si vous dsirez toutes les afficher.
afficher

le depuis le volet de commandes et appelez la fonction.


3. Sauvegardez le fichier, chargez-le
PowerShell
./Coach.ps1
DisplayProcessInfo("power")

La liste des processus dont le nom contient power saffiche avec les informations demandes :

4. Afin de simplifier lappel, modifiez le fichier pour inclure lappel la fonction juste aprs celle
celle-ci. Vous
lancerez automatiquement son excution lors du chargement du fichier de script.

Tche 3 : Le mode debug


Un autre intrt des scripts cest de pouvoir dboguer vos sc
scripts : vous pourrez ainsi facilement suivre
lexcution de votre code et les valeurs de vos variables.. Il vous sera plus facile de trouver et comprendre le
comportement de votre script et dtecter les erreurs potentielles.
1. Effectuez un clic droit sur la ligne 4 et choisissez Activer/dsactiver le point darrt . Vous pouvez aussi
utiliser la touche F9 , les habitus de Visual Studio retrouveront aussitt leurs marques.

2. Lancer lexcution du script en pressant F5 ou depuis le menu ou la barre doutils. Cette


C
fois-ci
lexcution sarrtera sur votre point darrt. Vous pouvez ds lors faire du pas pas avec F10.

3. Les variables sont visualisables en maintenant le curseur de la souris dessus. Regardez par exemple les
variables $processName et $_.Name .

Tche 4 : Aller plus loin dans lcriture de scripts


Afin dexplorer quelques autres aspects de lcriture de scripts, vous allez maintenant raliser une petite
application permettant de dmarrer ou arrter un service daprs son nom.
1. Crez un nouveau fichier

2. Saisissez le code suivant :


PowerShell
$servName = Read-Host "Veuillez saisir le nom du service : "
Write-Host "Voici les services trouvs : "
$services = Get-Service "*$servName*"
if ($services.Count -gt 0)
{
$count = 0;
# Affichage des services trouvs
foreach($serv in $services)
{
$count++
Write-Host -foregroundcolor Red [$count] $serv.DisplayName - $serv.Name
Write-Host -foregroundcolor Red "
" Status : $serv.Status
}
# Rcupration de l'lment
$servNum = Read-Host "Veuillez saisir le numro du service : "
$selectedService = $services[$servNum-1]
if ($selectedService)
{
Write-Host -foregroundcolor Green Service slectionn : $selectedService.Name
# Selon l'tat du service, proposer l'arrt ou le dmarrage

switch ($selectedService.Status)
{
"Running" {
$stopIt = Read-Host "Souhaitez-vous arrter le service ? [O/N] : "
if ($stopIt -like "o")
{
Write-Host Arrt du service
Stop-Service $selectedService.Name
}
else {
Write-Host Commande annule
}
}
"Stopped" {
$startIt = Read-Host "Souhaitez-vous dmarrer le service ? [O/N] : "
if ($startIt -like "o")
{
Write-Host Dmarrage du service
Start-Service $selectedService.Name
}
else {
Write-Host Commande annule
}
}
default
{
Write-Host Le service ne peut pas tre dmarr ou arrt
}
}
}
else
{
Write-Host Le numro ne correspond pas un des services lists
}
}
else
{
Write-Host Aucun service trouv
}

3. Quelques explications :
Vous allez effectuer la saisie grce la commande Read-Host que vous allez stocker dans des
variables rutilises par la suite
La commande Write-Host peut tre personnalise pour afficher le texte dans dautres
couleurs, trs pratique lorsque les scripts affichent beaucoup de lignes pour amliorer la lisibilit
Les cmdlets de gestion des services permettent de rcuprer lensemble des services, de les
dmarrer ou de les arrter ( Get-Service , Start-Service , Stop-Service ).
4. Mettez profit les notions de deboguage de lexercice prcdent pour tester votre script et son
droulement.

Exercice 3 : Excution de commandes distantes


Une des grosses nouveauts de cette deuxime version de PowerShell tient en sa capacit excuter des
commandes distance. Il devient alors trs pratique dadministrer ses machines sans avoir sy connecter. Nous
allons couvrir de sa configuration son utilisation.

Tche 1 Configuration de laccs distant


Pour pouvoir utiliser PowerShell distance, il vous faut configurer le service Windows Remote Management
(WinRM) sur lordinateur cible. Vous trouverez les informations compltes dinstallation et de configuration de
WinRM sur TechNet la page suivante : http://msdn.microsoft.com/en-us/library/aa384372(VS.85).aspx.
Dans cette premire tape, nous allons montrer la configuration simplifie dune machine pour tre
administrable distance. Nous partons des postulats suivants :

Les deux machines sont dans le mme domaine


Windows Remote Management est correctement install sur lordinateur et le service est lanc. Dans le
doute, lancez la commande Start-Service WinRM

1. Windows Remote Management propose en standard plusieurs scripts dadministration, dont une
configuration simplifie que vous allez utiliser ici. Tout dabord, vrifiez que vous tes connect avec un
compte administrateur local.
2. Lancez alors la commande suivante en prenant soin deffectuer un Lancer en tant quadministrateur soit
dans un prompt classique, soit depuis PowerShell (ISE ou commande).
Prompt / PowerShell
winrm quickconfig

WinRM vous proposera de configurer automatiquement lordinateur pour accepter les requtes, ajouter un
listener (le moyen de recevoir des commandes) et ajouter les rgles dexception votre pare-feu.
Rpondez par laffirmative pour les changements effectuer ( y ).

Votre poste supporte maintenant les connexions.


3. Pour le vrifier, connectez-vous depuis lautre machine et lancez Windows PowerShell ISE .

4. Depuis la barre doutils, lancez un nouvel onglet PowerShell distance depuis le menu Fichier ou licne
correspondante dans la barre doutils (le petit cran).

5. Une fentre vous demandant les informations de connexion apparat, saisissez le nom de la machine cible et
le nom de lutilisateur.

6. Une fois la connexion effectue, le nom de la machine distante est prsente dans la zone de commandes
avant le fil dariane (ici spsdev ) :

7. Pour sen assurer, vous pouvez afficher le nom de la machine courante grce la commande suivante.
PowerShell
hostname

Le rsultat est videmment le nom de la machine cible.


Vous pouvez comparer en excutant la mme commande dans un autre onglet PowerShell en local.

Tche 2 : Gestion des informations de connexions


Vous vous tes connect distance et vous avez pu lancer des cmdlets. Mais avez-vous remarqu comment
PowerShell a traduit votre saisie pour effectuer louverture dune session ? En effet, on retrouve dans le volet de
sortie les 2 lignes suivantes :

PowerShell a lanc la commande Enter-PSSession permettant de crer une session sur une machine dont le
nom est pass en argument et a ajout le paramtre Credential pour passer le compte utiliser. La
deuxime ligne modifie le nom de longlet pour le rendre plus lisible.
Nous allons voir maintenant comment grer ces connexions.
1. Ouvrez un nouvel onglet (local).
2. Nous allons utiliser une session pour crer un contexte afin de pouvoir lancer nos commandes distance.
Commencez par consulter les cmdlets de gestion des sessions.
PowerShell
Get-Command *session

3. Crez une nouvelle session sur lordinateur distant.


PowerShell
New-PSSession ComputerName MonPC Credential:Domaine\Utilisateur

Un message indique la cration de la session.

4. Ensuite, connectez vous cette session.


PowerShell
Enter-PSSession Name Session2

5. Vous passez alors en mode connect. Affichez le nom de la machine pour le vrifier.
PowerShell
hostname

6. Listez les services de lordinateur distant actuellement lancs.


PowerShell
Get-Service | Where { $_.Status eq 'Running' }

7. Quittez la session :
PowerShell
exit

8. Si vous manipulez plusieurs sessions, par exemple pour pouvoir atteindre plusieurs machines, sachez que
vous pouvez rcuprer tout moment leur liste :
PowerShell
Get-PSSession

Ici par exemple 2 sessions sont disponibles.

9. Vous pouvez rutiliser une session une fois quitte, sauf si vous la supprimez comme suit :
PowerShell
Remove-PSSession Name Session2

Tche 3 Lancer une commande simple distance


Jusqu prsent nous avons ouvert directement une session pour pouvoir lancer plusieurs commandes sans
avoir se reconnecter. Cependant, il nest pas forcment ncessaire de passer par ces sessions lorsque lon ne
dsire lancer quune ou deux commandes. Cest ici que Invoke-Command prend tout son sens.
Remarque : remplacez les occurrences de MonPC par le nom de lordinateur cible.
1. Lancez Windows PowerShell ISE et ouvrez un onglet local.
2. Regardez laide de la commande Invoke-Command
PowerShell
Get-Help Invoke-Command

Il faut fournir le nom de lordinateur ( computername ) et les commandes excuter ( scriptblock ).

3. Pour obtenir le nom de lordinateur distant, lancez la commande suivante


PowerShell
Invoke-Command -ComputerName MonPC -ScriptBlock { hostname }

4. Si vous avez besoin de lancer plusieurs commandes avec la mme session, utilisez New-PSSession pour
gnrer lidentit que vous passerez chaque appel via largument session comme suit :
PowerShell
$session = New-PSSession computername MonPC
Invoke-Command session $session scriptblock { $p = get-process }
Invoke-Command session $session scriptblock { $p | Format-List Id, Name, Description }

Vous remarquez que la session est rutilisable et que le contexte dutilisation est prserv : la variable
$p est conserve entre les deux appels.
Remarque : attention, dans lexercice prcdent, nous passions le nom de la session pour sy connecter. Ce
nom ne peut pas tre utilis ici car cest lobjet session qui est pass Invoke-Command et non une chane
de caractres.
5. Plutt quun bloc de script, vous pouvez aussi excuter un script local sur une machine distante sans avoir
le copier. Pour cela, utilisez le paramtre FilePath en lui passant le chemin du fichier ps1 situ sur la
machine source.
PowerShell
Invoke-Command computername MonPC FilePath .\Coach.ps1

Remarque : vous pouvez videmment rutiliser la session comme dans lexemple prcdent.

Ressources
Vous trouverez de nombreuses ressources sur Internet, mais voici dj un bon point de dpart :

Site officiel Windows PowerShell : http://www.microsoft.com/powershell


Blog Windows PowerShell: http://blogs.msdn.com/powershell
Tlchargement du Windows Management Framework dont fait partie Windows PowerShell :
http://support.microsoft.com/kb/968929