Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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.
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 .
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.
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. 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.
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.
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 .
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 ).
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.
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
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 : 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