Documente Academic
Documente Profesional
Documente Cultură
PowerShell- Tutoriel
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 :
Prrequis
Pour complter ce tutoriel vous devez avoir :
Microsoft Windows 7
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.
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
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.
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 .
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.
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
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.
3. Les variables sont visualisables en maintenant le curseur de la souris dessus. Regardez par exemple les
variables $processName et $_.Name .
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.
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 ).
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
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
5. Vous passez alors en mode connect. Affichez le nom de la machine pour le vrifier.
PowerShell
hostname
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
9. Vous pouvez rutiliser une session une fois quitte, sauf si vous la supprimez comme suit :
PowerShell
Remove-PSSession Name Session2
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 :