Vous êtes sur la page 1sur 17

Decouverte de 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 .......................................................................................................... 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 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 scripts 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 dans le menu dmarrer / tous les programmes / Accessoires puis Windows PowerShell . Si votre Windows est en 64-bit, vous remarquez la prsence de versions 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 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 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 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... 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. Tapez par exemple Get-c puis pressez plusieurs fois la touche Tab pour voir apparatre les diffrentes possibilits. 5. Une petite nouveaut de PowerShell 2.0 concerne lajout de la commande Out-GridView . 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 en tapant dans le volet de commandes : PowerShell


Get-ExecutionPolicy

Vous devriez obtenir ceci :

3. Entrez la commande Get-Process dans la zone de script et sauvegardez le fichier en tant que Coach.ps1 . Longlet porte le nom du fichier.

4. Pour excuter le script, cliquez sur la flche verte dans la barre doutils ou bien appuyez sur F5 . Une erreur explique que lexcution de script est dsactive.

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


Set-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 crire un premier script PowerShell plus avanc. 1. Vous pouvez relancer votre script qui cette fois-ci fonctionnera parfaitement. 2. Le script nutilise pour linstant quune commande, or les scripts sont plutt utiliss pour dfinir des fonctions rutilisables plus complexes. Effacez le contenu du fichier et remplacez le par le code suivant : PowerShell
function DisplayProcessInfo($processName) { Write-Host "Affichage des processus contenant : $processName" $p = Get-Process | Where-Object { $_.Name -like "*$processName*" } $p | Format-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. Vous pouvez remarquer que cette variable est la fois utilise pour afficher laction 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. On accde ainsi ses proprits, ici Name , pour effectuer notre test. Ct oprateurs, outre le -like vous aurez les classiques -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 Format-List par * si vous dsirez toutes les afficher.

3. Sauvegardez le fichier, chargez-le depuis le volet de commandes et appelez la fonction. 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-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 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 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