Vous êtes sur la page 1sur 127

Guide lmentaire de Windows PowerShell

Microsoft Corporation Date de publication : septembre 2006

Rsum
Windows PowerShell est un nouvel environnement de ligne de commande Windows spcialement conu pour les administrateurs systme. Il comprend une invite interactive et un environnement de script qui peuvent tre utiliss indpendamment l'un de l'autre ou ensemble. Ce document dcrit les principaux concepts et fonctionnalits de Windows PowerShell et suggre des faons de l'utiliser dans l'administration du systme.

Sommaire
Guide lmentaire de Windows PowerShell - Copyright .................................................... 9 Prsentation de Windows PowerShell .............................................................................. 10 Audience ........................................................................................................................ 10 propos de Windows PowerShell .................................................................................... 10 Dcouverte .................................................................................................................... 10 Cohrence ..................................................................................................................... 11 Environnements interactif et de script ........................................................................... 11 Orientation objet ............................................................................................................ 12 Transition facile au script ............................................................................................... 12 Installation et excution de Windows PowerShell ............................................................ 12 Configuration requise pour l'installation ......................................................................... 12 Installation de Windows PowerShell .............................................................................. 12 Excution de Windows PowerShell ............................................................................... 13 Principes fondamentaux de Windows PowerShell ........................................................... 14 Concepts Windows PowerShell importants ...................................................................... 15 Les commandes ne sont pas bases sur du texte ..................................................... 15 La famille de commandes est extensible ................................................................... 15 Windows PowerShell gre l'entre et l'affichage sur une console ............................. 16 Windows PowerShell utilise une syntaxe C# ............................................................. 17 Apprentissage des noms Windows PowerShell ............................................................... 17 Les applets de commande utilisent des noms verbe-substantif pour rduire la mmorisation des commandes ............................................................................... 18 Les applets de commande utilisent des paramtres standard................................... 20 Paramtre Help (?) ................................................................................................. 20 Paramtres courants ............................................................................................... 20 Paramtres suggrs .............................................................................................. 20 Obtention d'informations de synthse sur les commandes .............................................. 21 Affichage des types de commandes disponibles ....................................................... 22 Obtention d'informations d'aide dtailles ........................................................................ 23 Utilisation de noms de commandes familiers ................................................................... 24

Interprtation des alias standard ................................................................................ 25 Cration d'alias ........................................................................................................... 26 Utilisation de l'extension par tabulation pour complter automatiquement des noms ...... 26 Pipeline d'objets ................................................................................................................ 28 Fonctionnement du pipeline Windows PowerShell ........................................................... 29 Consultation de la structure d'objets (Get-Member) ......................................................... 31 Utilisation des commandes Format pour modifier l'affichage de la sortie......................... 33 Utilisation de Format-Wide pour une sortie un seul lment .................................. 33 Contrle de l'affichage de Format-Wide avec Column ........................................... 34 Utilisation de Format-List pour une vue Liste ............................................................. 34 Obtention d'informations dtailles en utilisant Format-List avec des caractres gnriques ........................................................................................................... 35 Utilisation de Format-Table pour une sortie sous forme de tableau .......................... 35 Amlioration de la sortie de Format-Table (AutoSize) ............................................ 35 Renvoi la ligne dans la sortie en colonnes de Format-Table (Wrap) .................. 37 Organisation de la sortie en tableau (-GroupBy) .................................................... 38 Redirection de donnes avec les applets de commande Out-* ........................................ 38 Pagination de la sortie de la console (Out-Host) .................................................... 40 Suppression de la sortie (Out-Null) ......................................................................... 40 Impression de donnes (Out-Printer) ..................................................................... 41 Enregistrement de donnes (Out-File) ................................................................... 41 Navigation dans Windows PowerShell ............................................................................. 42 Gestion de l'emplacement actuel dans Windows PowerShell .......................................... 43 Obtention de votre emplacement actuel (Get-Location) ............................................ 43 Dfinition de votre emplacement actuel (Set-Location) ............................................. 44 Enregistrement et rappel des emplacements rcents (Push-Location et PopLocation) ................................................................................................................. 45 Gestion des lecteurs Windows PowerShell ...................................................................... 47 Ajout de nouveaux lecteurs Windows PowerShell (New-PSDrive) ............................ 49 Suppression de lecteurs Windows PowerShell (Remove-PSDrive) .......................... 51 Ajout et suppression de lecteurs l'extrieur de Windows PowerShell .................... 51 Utilisation de fichiers, dossiers et cls de Registre ........................................................... 52 numration de fichiers, dossiers et cls de Registre (Get-ChildItem) ..................... 52 Listage de tous les lments contenus (-Recurse) ................................................ 53

Filtrage d'lments par nom (-Name) ..................................................................... 53 Listage forc des lments masqus (-Force) ....................................................... 53 Mise en correspondance de noms d'lments avec des caractres gnriques ... 53 Exclusion d'lments (-Exclude) ............................................................................. 54 Combinaison de paramtres de Get-ChildItem ...................................................... 55 Manipulation directe d'lments........................................................................................ 56 Cration d'lments (New-Item)................................................................................. 57 Pourquoi les valeurs du Registre ne sont pas des lments ..................................... 58 Affectation d'un nouveau nom des lments existants (Rename-Item).................. 58 Dplacement d'lments (Move-Item) ....................................................................... 59 Copie d'lments (Copy-Item).................................................................................... 59 Suppression d'lments (Remove-Item) .................................................................... 60 Excution d'lments (Invoke-Item) ........................................................................... 61 Utilisation d'objets ............................................................................................................. 61 Obtention d'objets WMI (Get-WmiObject) ......................................................................... 62 Obtention d'objets WMI (Get-WmiObject) ..................................................................... 62 Listage des classes WMI............................................................................................ 62 Affichage d'informations sur une classe WMI ............................................................ 63 Affichage des proprits autres que celles par dfaut avec les applets de commande Format .............................................................................................. 64 Cration d'objets .NET et COM (New-Object) .................................................................. 65 Utilisation de New-Object pour l'accs aux journaux d'vnements ......................... 66 Utilisation de constructeurs avec New-Object ........................................................ 66 Stockage d'objets dans des variables .................................................................... 67 Accs un journal des vnements distant avec New-Object............................... 67 Effacement d'un journal des vnements avec des mthodes d'objets ................. 68 Cration d'objets COM avec New-Object .................................................................. 69 Cration d'un raccourci sur le Bureau avec WScript.Shell......................................... 69 Utilisation d'Internet Explorer partir de Windows PowerShell ................................. 71 Obtention d'avertissements sur les objets COM associs un wrapper .NET ......... 73 Utilisation de classes et de mthodes statiques ............................................................... 74 Obtention de donnes d'environnement avec System.Environment ......................... 74 Rfrence la classe statique System.Environment ............................................. 75 Affichage des proprits statiques de System.Environment .................................. 76 Mathmatiques avec System.Math ............................................................................ 76 Suppression d'objets du pipeline (Where-Object)............................................................. 78

Excution de tests simples avec Where-Object ......................................................... 78 Filtrage selon les proprits d'un objet ...................................................................... 80 Rptition d'une tche pour plusieurs objets (ForEach-Object) ....................................... 81 Slection de parties d'objets (Select-Object) .................................................................... 82 Tri d'objets ......................................................................................................................... 83 Utilisation de variables pour stocker des objets ................................................................ 84 Cration d'une variable .............................................................................................. 85 Manipulation de variables........................................................................................... 86 Utilisation de variables Cmd.exe ................................................................................ 86 Utilisation de Windows PowerShell pour l'administration ................................................. 87 Gestion des processus locaux .......................................................................................... 87 Listage des processus (Get-Process) ........................................................................ 88 Arrt de processus (Stop-Process) ............................................................................ 89 Arrt de toutes les autres sessions Windows PowerShell ......................................... 90 Gestion de services locaux ............................................................................................... 91 Listage des services ................................................................................................... 91 Arrt, dmarrage, interruption et redmarrage de services ....................................... 92 Collecte d'informations sur des ordinateurs ...................................................................... 93 Listage des paramtres des bureaux ......................................................................... 94 Listage des informations sur le BIOS ......................................................................... 94 Listage des informations sur le processeur................................................................ 94 Listage du fabricant et du modle de l'ordinateur ...................................................... 95 Listage des correctifs logiciels installs ..................................................................... 95 Listage des informations de version d'un systme d'exploitation .............................. 96 Listage des utilisateurs et du propritaire locaux ....................................................... 97 Obtention de l'espace disque disponible .................................................................... 97 Obtention d'informations sur les ouvertures de session ............................................ 98 Obtention de l'utilisateur connect un ordinateur .................................................... 98 Obtention de l'heure locale d'un ordinateur ................................................................ 98 Affichage de l'tat des services .................................................................................. 99 Utilisation d'installations logicielles ................................................................................... 99 Listage des applications Windows Installer................................................................ 99 Listage de toutes les applications pouvant tre dsinstalles ................................. 101 Installation d'applications ......................................................................................... 103

Suppression d'applications ....................................................................................... 103 Mise niveau d'applications Windows Installer ....................................................... 104 Changement d'tat de l'ordinateur : verrouillage, fermeture de session, arrt en cours et redmarrage ................................................................................................................ 104 Verrouillage d'un ordinateur ..................................................................................... 105 Fermeture de la session active ................................................................................ 105 Arrt ou redmarrage d'un ordinateur ...................................................................... 105 Utilisation d'imprimantes ................................................................................................. 106 Listage des connexions d'imprimantes .................................................................... 106 Ajout d'une imprimante rseau ................................................................................. 106 Dfinition d'une imprimante par dfaut..................................................................... 106 Suppression d'une connexion d'imprimante............................................................. 107 Tches de gestion de rseau .......................................................................................... 107 Listage des adresses IP d'un ordinateur .................................................................. 107 Listage des donnes de configuration IP ................................................................. 108 Test Ping sur des ordinateurs .................................................................................. 109 Rcupration de proprits de cartes rseau .......................................................... 110 Assignation du domaine DNS pour une carte rseau .............................................. 110 Tches de configuration DHCP ................................................................................ 111 Identification des cartes actives DHCP ............................................................... 111 Rcupration des proprits DHCP ..................................................................... 111 Activation de DHCP sur chaque carte .................................................................. 111 Libration et renouvellement des baux DHCP de certaines cartes ...................... 112 Libration et renouvellement des baux DHCP de toutes les cartes ..................... 112 Cration d'un partage rseau ................................................................................... 113 Suppression d'un partage rseau ............................................................................ 113 Connexion d'un lecteur rseau accessible par Windows ......................................... 114 Utilisation des fichiers et dossiers ................................................................................... 114 Listage de tous les fichiers et dossiers d'un dossier ................................................ 114 Copie de fichiers et de dossiers ............................................................................... 115 Cration de fichiers et de dossiers ........................................................................... 116 Suppression de tous les fichiers et dossiers d'un dossier ....................................... 116 Mappage d'un dossier local en tant que lecteur accessible par Windows ............... 116 Lecture d'un fichier texte en tant que tableau .......................................................... 117 Utilisation des cls de Registre ....................................................................................... 117 Listage de toutes les sous-cls d'une cl de Registre ............................................. 118 Copie de cls ............................................................................................................ 119

Cration de cls ....................................................................................................... 119 Suppression de cls ................................................................................................. 120 Suppression de toutes les cls d'une cl spcifique ................................................ 120 Utilisation d'entres du Registre ..................................................................................... 121 Listage des entres du Registre .............................................................................. 121 Obtention d'une seule entre du Registre ................................................................ 122 Cration d'entres de Registre................................................................................. 123 Affectation d'un nouveau nom des entres de Registre ....................................... 125 Suppression d'entres de Registre .......................................................................... 125 Annexe 1 - Alias de compatibilit .................................................................................... 125 Annexe 2 - Cration d'un raccourci PowerShell personnalis ........................................ 126

Guide lmentaire de Windows PowerShell - Copyright


Ce document est fourni uniquement titre d'information et Microsoft n'apporte aucune garantie, explicite ou implicite, le concernant. Les informations contenues dans ce document, y compris les URL et les rfrences d'autres sites Internet, peuvent tre modifies sans pravis. L'utilisateur reconnat assumer tous les risques lis l'utilisation ou aux rsultats de l'utilisation de ce document. Sauf mention contraire, les noms de socits, d'organisations, de produits et de domaines, les adresses de messagerie, les logos et les noms de personnes et de lieux, ou les vnements mentionns dans les exemples sont fictifs. Toute ressemblance avec des noms de socits, d'organisations, de produits, de domaines, des adresses de messagerie, des logos, des noms de personnes et de lieux ou des vnements rels est purement fortuite et involontaire. L'utilisateur est tenu d'observer la rglementation relative aux droits d'auteur applicable dans son pays. Sans limitation des droits issus des droits d'auteur, aucune partie de ce manuel ne peut tre reproduite, stocke ou incluse dans un systme de rcupration de donnes ou transmise, quelque fin ou par quelque moyen que ce soit (lectronique, mcanique, photocopie, enregistrement ou autre) sans la permission expresse et crite de Microsoft Corporation. Les produits mentionns dans ce document peuvent faire l'objet de brevets, de dpts de brevets en cours, de marques, de droits d'auteur ou d'autres droits de proprit intellectuelle de Microsoft. Sauf stipulation expresse contraire d'un contrat de licence crit de Microsoft, la fourniture de ce document n'a pas pour effet de vous concder une licence sur ces brevets, marques, droits d'auteur ou autres droits de proprit intellectuelle. 2006 Microsoft Corporation. Tous droits rservs. Microsoft, MS-DOS, Windows, Windows NT, Windows 2000, Windows XP et Windows Server 2003 sont soit des marques de Microsoft Corporation, soit des marques dposes de Microsoft Corporation, aux tats-Unis d'Amrique et/ou dans d'autres pays. Les noms de produits et de socits rels mentionns dans la prsente documentation sont des marques de leurs propritaires respectifs.

10

Prsentation de Windows PowerShell


Windows PowerShell est un environnement de ligne de commande et de script qui met la puissance du .NET Framework la porte des personnes qui utilisent la ligne de commande et crivent des scripts. Il introduit un certain nombre de concepts nouveaux et puissants qui vous permettent d'tendre les connaissances que vous avez acquises et les scripts que vous avez crs dans les environnements de l'invite de commandes Windows et Windows Script Host.

Audience
Le Guide lmentaire de Windows PowerShell s'adresse aux professionnels de l'informatique, aux programmeurs et aux utilisateurs chevronns qui n'ont aucune exprience avec Windows PowerShell. Bien qu'une exprience en criture de script et avec WMI soit utile, elle n'est ni suppose, ni obligatoire pour la comprhension de ce document.

propos de Windows PowerShell


Windows PowerShell est conu pour amliorer l'environnement de ligne de commande et de script en liminant des problmes de longue date et en ajoutant de nouvelles fonctionnalits.

Dcouverte
Windows PowerShell facilite la dcouverte de ses fonctionnalits. Par exemple, pour obtenir la liste des applets de commande qui affichent et modifient les services Windows, tapez :
get-command *-service

Aprs avoir dcouvert l'applet de commande qui accomplit une tche particulire, vous pouvez en apprendre davantage son sujet en utilisant l'applet de commande Get-Help. Par exemple, pour afficher de l'aide sur l'applet de commande Get-Service, tapez :
get-help get-service

Pour comprendre pleinement la sortie de cette applet de commande, dirigez sa sortie vers l'applet de commande Get-Member. Par exemple, la commande suivante affiche

11 des informations sur les membres de l'objet obtenu par l'applet de commande GetService.
get-service | get-member

Cohrence
La gestion de systme peut constituer un effort complexe que des outils prsentant une interface cohrente peuvent contribuer contrler. Malheureusement, ni les outils de ligne de commande, ni les objets COM scriptables ne sont connus pour leur cohrence. La cohrence de Windows PowerShell est l'un de ses principaux atouts. Par exemple, si vous apprenez comment utiliser l'applet de commande Sort-Object, vous pouvez utiliser cette connaissance pour trier la sortie de toute applet de commande. Il n'est pas ncessaire que vous appreniez les diffrentes routines de tri de chaque applet de commande. En outre, les dveloppeurs d'applets de commande n'ont pas concevoir de fonctionnalits de tri pour leurs applets de commande. Windows PowerShell leur donne une infrastructure qui fournit les fonctionnalits de base et force leur cohrence sur de nombreux aspects de l'interface. L'infrastructure limine certains choix habituellement laisss au dveloppeur, mais, en retour, rend beaucoup plus simple le dveloppement d'applets de commande fiables et faciles utiliser.

Environnements interactif et de script


Windows PowerShell est un environnement qui combine interactivit et criture de script pour vous donner accs des outils de ligne de commande et des objets COM tout en vous permettant de tirer parti de la puissance de la bibliothque de classes .NET Framework. Cet environnement amliore l'invite de commandes de Windows, qui fournit un environnement interactif avec plusieurs outils de ligne de commande. Il amliore galement les scripts WSH (Windows Script Host), qui vous permettent d'utiliser plusieurs outils de ligne de commande et objets automation COM, mais ne fournissent pas d'environnement interactif. En combinant l'accs toutes ces fonctionnalits, Windows PowerShell tend les capacits tant de l'utilisateur interactif que de celui qui crit des scripts et simplifie l'administration du systme.

12

Orientation objet
Bien que vous interagissiez avec Windows PowerShell en tapant des commandes en texte, Windows PowerShell est bas sur des objets, et non sur du texte. La sortie d'une commande est un objet. Vous pouvez envoyer l'objet de sortie une autre commande en tant qu'entre. En consquence, Windows PowerShell fournit une interface familire aux personnes habitues d'autres environnements, tout en introduisant un modle de ligne de commande nouveau et puissant. Il tend le concept de l'envoi de donnes entre commandes en vous permettant d'envoyer des objets, plutt que du texte.

Transition facile au script


Windows PowerShell facilite la transition de la saisie interactive de commandes la cration et l'excution de scripts. Vous pouvez taper des commandes l'invite de commandes de Windows PowerShell pour dcouvrir les commandes qui effectuent une tche. Vous pouvez ensuite enregistrer ces commandes dans une transcription ou un historique avant de les copier dans un fichier qui servira de script.

Installation et excution de Windows PowerShell


Configuration requise pour l'installation
Avant d'installer Windows PowerShell, veillez ce que votre systme dispose des logiciels requis par Windows PowerShell. Windows PowerShell requiert les programmes suivants : Windows XP Service Pack 2, Windows 2003 Service Pack 1 ou versions ultrieures de Windows Microsoft .NET Framework 2.0

Si une version de Windows PowerShell est dj installe sur l'ordinateur, utilisez Ajout/Suppression de programmes dans le Panneau de configuration pour la dsinstaller avant d'installer une nouvelle version.

Installation de Windows PowerShell


Pour installer Windows PowerShell

13 1. Tlchargez le fichier d'installation de Windows PowerShell. (Le nom de fichier varie selon la plateforme, le systme d'exploitation et le module linguistique.) 2. Pour dmarrer l'installation, cliquez sur Ouvrir. 3. Suivez les instructions des pages de l'Assistant Installation. Vous pouvez galement enregistrer les fichiers Windows PowerShell sur un partage rseau si vous souhaitez effectuer l'installation sur plusieurs ordinateurs. Pour effectuer une installation en mode silencieux, tapez :
<Nom_fichier_exe_PowerShell> /quiet

Par exemple :
PowerShellSetup_x86_fre.exe /quiet

Sur les versions 32 bits de Windows, Windows PowerShell est install, par dfaut, dans le rpertoire %SystemRoot%\System32\WindowsPowerShell\v1.0. Sur les versions 64 bits de Windows, une version 32 bits de Windows PowerShell est installe dans le rpertoire %SystemRoot%\SystemWow64\WindowsPowerShell\v1.0 et une version 64 bits de Windows PowerShell est installe dans le rpertoire %SystemRoot%\System32\WindowsPowerShell\v1.0.

Excution de Windows PowerShell


Pour dmarrer Windows PowerShell partir du menu Dmarrer, cliquez sur Dmarrer, sur Tous les programmes, sur Windows PowerShell 1.0, puis sur l'icne Windows PowerShell. Pour dmarrer Windows PowerShell partir de la zone Excuter, cliquez sur Dmarrer, cliquez sur Excuter, tapez powershell et cliquez sur OK. Pour dmarrer Windows PowerShell partir d'une fentre d'invite de commandes (cmd.exe), l'invite de commandes, tapez powershell. Parce que Windows PowerShell s'excute dans une session de console, vous pouvez utiliser cette technique pour l'excuter au cours d'une session telnet ou SSH distance. Pour revenir votre session d'invite de commandes, tapez exit.

14

Principes fondamentaux de Windows PowerShell


Les interfaces graphiques mettent en uvre certains concepts de base bien connus de la plupart des utilisateurs d'ordinateurs. Ces derniers s'appuient sur leur connaissance de ces interfaces pour accomplir des tches. Les systmes d'exploitation prsentent aux utilisateurs une reprsentation graphique des lments qui peuvent tre parcourus habituellement au moyen de menus droulants pour accder des fonctionnalits spcifiques et de menus contextuels pour accder des fonctionnalits propres au contexte. Une interface de ligne de commande (CLI), telle que Windows PowerShell, doit utiliser une approche diffrente pour exposer des informations, car elle est dpourvue de menus ou de systmes graphiques pour aider l'utilisateur. Vous devez connatre les noms des commandes avant de pouvoir les utiliser. Bien que vous puissiez taper des commandes complexes quivalentes aux fonctionnalits d'un environnement interface graphique utilisateur (GUI), vous devez vous familiariser avec les commandes et paramtres de commande couramment utiliss. La plupart des CLI sont dpourvues de modles susceptibles d'aider l'utilisateur apprendre l'interface. Parce que les CLI ont t les premiers environnements de systme d'exploitation, de nombreux noms de commandes et de paramtres ont t choisis de faon arbitraire. Des noms de commandes laconiques ont souvent t prfrs de plus clairs. Bien que des systmes d'aide et des normes de conception de commandes soient intgrs dans la plupart des CLI, ils ont gnralement t conus en vue de leur compatibilit avec les premires commandes, de sorte que le jeu de commandes reste faonn par des dcisions prises plusieurs dcennies auparavant. Windows PowerShell a t conu pour tirer parti des connaissances que les utilisateurs de CLI ont pu acqurir. Dans ce chapitre, nous prsenterons quelques outils et concepts de base que vous pouvez utiliser pour apprendre rapidement Windows PowerShell. Ils incluent : Utilisation de Get-Command Utilisation des commandes Cmd.exe et UNIX Utilisation de commandes externes Utilisation de la saisie automatique par tabulation Utilisation de Get-Help

15

Concepts Windows PowerShell importants


La conception de Windows PowerShell intgre des concepts provenant de nombreux environnements diffrents. Plusieurs d'entre eux sont connus des personnes ayant de l'exprience avec des environnements de ligne de commande ou de programmation spcifiques, mais peu de personnes en savent tout. La prsentation de certains de ces concepts fournit une vue d'ensemble utile de l'environnement.

Les commandes ne sont pas bases sur du texte


Contrairement aux commandes d'interface de ligne de commande traditionnelles, les applets de commande Windows PowerShell sont conues pour traiter des objets, informations structures allant au-del de simples chanes de caractres apparaissant l'cran. La sortie d'une commande contient toujours des informations supplmentaires que vous pouvez utiliser si vous en avez besoin. Nous aborderons ce sujet de faon plus dtaille dans ce document. Si vous avez dj utilis des outils de traitement de texte pour traiter des donnes de ligne de commande, vous constaterez qu'ils se comportent diffremment si vous essayez de les utiliser dans Windows PowerShell. Dans la plupart des cas, vous n'avez pas besoin d'outils de traitement de texte pour extraire des informations spcifiques. Vous pouvez accder directement certaines donnes en utilisant des commandes de manipulation d'objets Windows PowerShell standard.

La famille de commandes est extensible


Les interfaces telles que Cmd.exe ne vous permettent pas d'tendre directement le jeu de commandes intgr. Vous pouvez crer des outils de ligne de commande externes qui s'excutent dans Cmd.exe, mais ces outils sont dpourvus de services, tels que l'intgration d'aide, et Cmd.exe ne peut pas dterminer automatiquement qu'il s'agit de commandes valides. Les commandes binaires natives de Windows PowerShell, appeles applets de commande , peuvent tre enrichies des applets de commande que vous crez et ajoutez Windows PowerShell au moyen de composants logiciels enfichables. Les composants logiciels enfichables Windows PowerShell sont compils, comme les outils binaires de toute autre interface. Vous pouvez les utiliser pour ajouter l'environnement tant des fournisseurs de Windows PowerShell que de nouvelles applets de commande. En raison de la nature spciale des commandes internes Windows PowerShell, nous les appellerons applets de commande .

16 Remarque : Windows PowerShell peut excuter des commandes qui ne sont pas des applets de commande. Nous ne les prsenterons pas en dtail dans le Guide lmentaire de Windows PowerShell, mais il peut tre utile de les connatre en tant que catgories de types de commandes. Windows PowerShell prend en charge des scripts analogues aux scripts de l'environnement UNIX et aux fichiers de commandes Cmd.exe, mais dots de l'extension de nom de fichier .ps1. Il vous permet galement de crer des fonctions internes qui peuvent tre utilises directement dans l'interface ou dans des scripts.

Windows PowerShell gre l'entre et l'affichage sur une console


Lorsque vous tapez une commande, Windows PowerShell traite toujours directement l'entre de ligne de commande. Il met galement en forme la sortie que vous voyez l'cran. Ce point est important, car cela rduit le travail ncessaire de chaque applet de commande et garantit que vous pouvez toujours procder de la mme manire quelle que soit l'applet de commande utilise. L'aide de ligne de commande illustre bien la faon dont cela simplifie la vie des dveloppeurs et les utilisateurs d'outils. Les outils de ligne de commande traditionnels ont leurs propres mthodes pour demander et afficher de l'aide. Certains outils de ligne de commande utilisent /? pour afficher l'aide, d'autres -?, /H et d'autres encore //. Certains affichent l'aide dans une fentre GUI, plutt que sur l'cran de la console. Des outils complexes, comme des mises jour d'applications, dcompressent des fichiers internes avant d'afficher leur aide. Si vous n'utilisez pas le bon paramtre, l'outil peut ignorer ce que vous avez tap et commencer automatiquement une tche. Lorsque vous entrez une commande dans Windows PowerShell, tout ce que vous entrez est automatiquement analys et prtrait par Windows PowerShell. L'utilisation du paramtre -? avec une applet de commande Windows PowerShell signifie toujours afficher l'aide relative cette commande . Les dveloppeurs d'applets de commande n'ont pas besoin d'analyser la commande ; il leur suffit de fournir le texte d'aide. Il est important de comprendre que les fonctions d'aide sont disponibles dans Windows PowerShell mme lorsque vous y excutez des outils de ligne de commande traditionnels. Windows PowerShell traite les paramtres et passe les rsultats aux outils externes. Remarque : Si vous excutez une application graphique dans Windows PowerShell, la fentre de l'application s'ouvre. Windows PowerShell intervient uniquement lors du traitement de l'entre de ligne de commande que vous fournissez ou de la

17 sortie d'application retourne la fentre de la console ; il n'affecte pas le fonctionnement interne de l'application.

Windows PowerShell utilise une syntaxe C#


Parce qu'il se base sur le .NET Framework, Windows PowerShell prsente des fonctionnalits de syntaxe et des mots cls trs semblables ceux utiliss en langage de programmation C#. Apprendre Windows PowerShell facilitera grandement l'apprentissage de C#, si ce langage vous intresse. Si vous n'tes pas programmeur C#, cette ressemblance n'est pas importante. Toutefois, si vous connaissez dj C#, les ressemblances peuvent simplifier l'apprentissage de Windows PowerShell.

Apprentissage des noms Windows PowerShell


Apprendre les noms des commandes et paramtres de commande peut ncessiter un investissement significatif en termes de temps avec la plupart des interfaces de ligne de commande. Le problme est qu'il existe trs peu de modles, de sorte que le seul moyen d'apprendre consiste mmoriser chaque commande et chaque paramtre que vous devrez utiliser rgulirement. Lorsque vous travaillez avec une nouvelle commande ou un nouveau paramtre, vous ne pouvez gnralement pas utiliser ce que vous savez dj ; vous devez rechercher et apprendre un nouveau nom. Si vous observez la manire dont les ajouts incrmentiels de fonctionnalits enrichissent le petit jeu d'outils de dpart des interfaces, vous constaterez aisment que la structure n'est pas standard. Avec les noms de commande en particulier, cela peut sembler logique, puisque chaque commande est un outil distinct, mais il existe un meilleur moyen de grer des noms de commandes. La plupart des commandes sont construites pour grer des lments du systme d'exploitation ou des applications, comme des services ou processus. Les commandes ont une varit de noms qui peuvent ou non s'intgrer une famille. Par exemple, sur les systmes Windows, vous pouvez utiliser les commandes net start et net stop pour dmarrer et arrter un service. Il existe pour Windows un autre outil de contrle de service plus gnraliste, dont le nom est compltement diffrent, sc, ce qui ne correspond pas au modle de dnomination des commandes de service net. Pour la gestion des processus, Windows possde la commande tasklist qui permet d'obtenir la liste des processus et la commande taskkill qui permet de les arrter.

18 Les spcifications de paramtres pour les commandes qui les acceptent n'obissent pas toutes aux mmes rgles. Vous ne pouvez pas utiliser la commande net start pour dmarrer un service sur un ordinateur distant. La commande sc permet de dmarrer un service sur un ordinateur distant, mais pour spcifier l'ordinateur distant, vous devez faire prcder son nom de deux barres obliques inverses. Par exemple, pour dmarrer le service spouleur sur un ordinateur distant nomm DC01, vous taperiez sc \\DC01 start spooler. Pour obtenir la liste des tches en cours d'excution sur DC01, vous devez utiliser le paramtre /S (pour system ) et fournir le nom DC01 sans barres obliques inverses, comme ceci : tasklist /S DC01. Bien qu'il existe d'importantes distinctions techniques entre un service et un processus, tous deux constituent des exemples d'lments qu'il est possible de grer sur un ordinateur et ayant un cycle de vie prcis. Vous pouvez dmarrer ou arrter un service ou un processus ou obtenir la liste de tous les services ou processus en cours d'excution. En d'autres termes, bien qu'il s'agisse de deux choses distinctes, les actions que nous effectuons sur un service ou un processus sont souvent conceptuellement les mmes. En outre, les choix que nous pouvons faire pour personnaliser une action en spcifiant des paramtres peuvent galement tre conceptuellement semblables. Windows PowerShell exploite ces similarits pour rduire le nombre de noms distincts que vous devez connatre pour comprendre et utiliser des applets de commande.

Les applets de commande utilisent des noms verbesubstantif pour rduire la mmorisation des commandes
Windows PowerShell utilise un systme de dnomination verbe-substantif , o chaque nom d'applet de commande est constitu d'un verbe standard et d'un substantif spcifique, tous deux souvent anglais, spars par un tiret. Les verbes Windows PowerShell ne sont pas toujours des verbes anglais, mais ils expriment des actions spcifiques dans Windows PowerShell. Les substantifs sont trs similaires ceux des autres langues et dcrivent des types spcifiques d'objets essentiels pour l'administration du systme. Il est ais de dmontrer par quelques exemples comment ces noms en deux parties rduisent l'effort d'apprentissage. Les substantifs sont moins restreints, mais doivent toujours dcrire ce sur quoi agit une commande. Windows PowerShell propose des commandes telles que Get-Process, Stop-Process, Get-Service et Stop-Service. Dans le cas de deux substantifs et deux verbes, la cohrence ne simplifie pas autant l'apprentissage. Toutefois, si vous considrez un jeu standard de 10 verbes et 10 substantifs, vous n'avez que 20 mots comprendre, mais ces mots peuvent tre utiliss pour former 100 noms de commandes distincts.

19 Vous pouvez frquemment reconnatre ce que fait une commande en lisant son nom et le substantif utiliser pour une nouvelle commande est souvent vident. Par exemple, une commande d'arrt de l'ordinateur peut tre Stop-Computer. Une commande qui rpertorie tous les ordinateurs d'un rseau peut tre Get-Computer. La commande qui obtient la date systme est Get-Date. Vous pouvez rpertorier toutes les commandes qui incluent un verbe particulier au moyen du paramtre -Verb de Get-Command (nous prsenterons en dtail GetCommand dans la section suivante). Par exemple, pour consulter toutes les applets de commande qui utilisent le verbe Get, tapez :
PS> Get-Command CommandType ----------Cmdlet Cmdlet Cmdlet Cmdlet ... -Verb Get Name ---Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Definition ---------Get-Acl [[-Path] <String[]>]... Get-Alias [[-Name] <String[]... Get-AuthenticodeSignature [-... Get-ChildItem [[-Path] <Stri...

Le paramtre -Noun est plus utile encore, car il vous permet de consulter une famille des commandes qui affectent le mme type d'objet. Par exemple, si vous souhaitez consulter les commandes disponibles pour la gestion de services, tapez la commande suivante :
PS> Get-Command CommandType ----------Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet ... -Noun Service Name ---Get-Service New-Service Restart-Service Resume-Service Set-Service Start-Service Stop-Service Suspend-Service Definition ---------Get-Service [[-Name] <String... New-Service [-Name] <String>... Restart-Service [-Name] <Str... Resume-Service [-Name] <Stri... Set-Service [-Name] <String>... Start-Service [-Name] <Strin... Stop-Service [-Name] <String... Suspend-Service [-Name] <Str...

Une commande n'est pas une applet de commande simplement parce que son nom obit au modle verbe-substantif. Clear-Host, par exemple, est une commande Windows PowerShell native qui permet d'effacer le contenu de la fentre de console, mais n'est pas une applet de commande. La commande Clear-Host est en ralit une fonction interne, comme vous pouvez le voir si vous excutez Get-Command dessus :
PS> Get-Command -Name Clear-Host CommandType ----------Function Name ---Clear-Host Definition ---------$spaceType = [System.Managem...

20

Les applets de commande utilisent des paramtres standard


Comme indiqu prcdemment, les commandes utilises dans les interfaces de ligne de commande traditionnelles n'ont gnralement pas de noms de paramtres cohrents. Il peut mme arriver que des paramtres n'aient pas de nom du tout. Lorsqu'ils en ont un, il s'agit souvent d'un caractre ou de mots abrgs qui peuvent tre taps rapidement, mais ne sont pas faciles comprendre pour les nouveaux utilisateurs. Contrairement la plupart des autres interfaces de ligne de commande traditionnelles, Windows PowerShell traite les paramtres directement et utilise cet accs direct aux paramtres ainsi que des indications fournies aux dveloppeurs pour normaliser les noms de paramtres. Bien que cela ne garantisse pas que chaque applet de commande sera conforme aux normes, cela y incite. Remarque : Les noms de paramtres sont toujours prcds d'un - lorsque vous les utilisez, pour permettre Windows PowerShell de les identifier clairement en tant que paramtres. Dans l'exemple Get-Command -Name Clear-Host, le nom du paramtre est Name, mais il est entr sous la forme -Name. Vous trouverez ci-dessous certaines caractristiques gnrales des noms et utilisations de paramtres standard.

Paramtre Help (?)


Lorsque vous spcifiez le paramtre -? pour une applet de commande, celle-ci n'est pas excute. la place, Windows PowerShell affiche l'aide qui lui est associe.

Paramtres courants
Windows PowerShell propose plusieurs paramtres appels paramtres courants . Parce que ces paramtres sont contrls par le moteur Windows PowerShell, chaque fois qu'ils sont implments par une applet de commande, ils se comportent toujours de la mme manire. Les paramtres courants sont WhatIf, Confirm, Verbose, Debug, Warn, ErrorAction, ErrorVariable, OutVariable et OutBuffer.

Paramtres suggrs
Les applets de commande principales Windows PowerShell utilisent des noms standard pour les paramtres semblables. Bien que l'utilisation de noms de paramtres ne soit pas impose, des indications explicites sont fournies afin de favoriser la normalisation.

21 Par exemple, ces indications recommandent de nommer un paramtre faisant rfrence un ordinateur par son nom comme ComputerName, plutt que par Server, Host, System, Node ou autres mots courants possibles. Parmi les importants noms de paramtres suggrs, citons Force, Exclude, Include, PassThru, Path et CaseSensitive.

Obtention d'informations de synthse sur les commandes


L'applet de commande Get-Command Windows PowerShell rcupre les noms de toutes les commandes disponibles. Lorsque vous tapez Get-Command une invite Windows PowerShell, vous obtenez une sortie similaire la suivante :
PS> Get-Command CommandType ----------Cmdlet Cmdlet Cmdlet ... Name ---Add-Content Add-History Add-Member Definition ---------Add-Content [-Path] <String[... Add-History [[-InputObject] ... Add-Member [-MemberType] <PS...

Cette sortie ressemble beaucoup la sortie d'aide de Cmd.exe : une synthse sous forme de tableau des commandes internes. Dans l'extrait de sortie de la commande GetCommand reprsent ci-dessus, chaque commande indique a un CommandType (type de commande) d'applet de commande. Une applet de commande est le type de commande intrinsque de Windows PowerShell qui correspond peu prs aux commandes dir et cd de Cmd.exe et aux commandes intgres des environnements UNIX tels que BASH. Dans la sortie de la commande Get-Command, toutes les dfinitions se terminent par des points de suspension (...) pour indiquer que PowerShell ne peut pas afficher l'ensemble du contenu dans l'espace allou. Lorsque Windows PowerShell affiche la sortie, il la met en forme comme du texte, puis l'organise pour un affichage net des donnes dans une fentre de console. Nous en reparlerons dans la section consacre aux formateurs. L'applet de commande Get-Command a un paramtre Syntax qui vous permet de ne rcuprer que la syntaxe de chaque applet de commande. Entrez la commande GetCommand -Syntax pour afficher la sortie dans son intgralit :
PS> Get-Command -Syntax Add-Content [-Path] <String[]> [-Value] <Object[]> [-PassThru] [-Filter <String>] [-Include <String[]>] [-Exclude <String[]>] [-Force] [Credential <PSCredential>]

22
[-Verbose] [-Debug] [-ErrorAction <ActionPreference>] [-ErrorVariable <String>] [OutVariable <String>] [-OutBuffer <Int32>] [-WhatIf] [-Confirm] [-Encoding <FileSystemCmdletProviderEncoding>] Add-History [[-InputObject] <PSObject[]>] [-Passthru] [-Verbose] [-Debug] [ErrorAction <ActionPreference>] [-ErrorVariable <String>] [-OutVariable <String>][-OutBuffer <Int32>]...

Affichage des types de commandes disponibles


La commande Get-Command ne rpertorie pas toutes les commandes disponibles dans Windows PowerShell, mais uniquement les applets de commande de sa session. Windows PowerShell prend en effet en charge plusieurs autres types de commandes. Les alias, fonctions et scripts sont galement des commandes Windows PowerShell, bien qu'ils ne soient pas abords en dtail dans le Guide lmentaire de Windows PowerShell. Des fichiers externes qui sont excutables ou disposent d'un gestionnaire de type de fichier inscrit dans le Registre sont galement classs comme tant des commandes. Vous pouvez retourner une liste de tous les lments pouvant tre appels en entrant la commande suivante :
PS> Get-Command *

Cette liste incluant des fichiers externes dans votre chemin de recherche, elle peut contenir des milliers d'lments. Il est plus judicieux de s'intresser un jeu rduit de commandes. Pour rechercher des commandes natives d'autres types, vous pouvez utiliser le paramtre CommandType de l'applet de commande Get-Command. Bien que nous n'ayons pas encore parl de ces autres types de commandes, vous pouvez les afficher si vous connaissez le nom du CommandType d'une classe de commandes. Remarque : Bien que nous ne l'ayons pas encore abord, l'astrisque (*) est utilis pour la concordance par caractres gnriques dans les arguments de commande Windows PowerShell. L'astrisque (*) signifie faire correspondre un ou plusieurs caractres quelconques . Vous pouvez taper Get-Command a* pour rechercher toutes les commandes dont le nom commence par la lettre a . Contrairement la concordance par caractres gnriques de Cmd.exe, celle de Windows PowerShell permet la mise en correspondance du point (.). Pour afficher les alias (autres noms utiliss pour dsigner des commandes) spciaux de catgories de commandes, entrez la commande suivante :
PS> Get-Command -CommandType Alias

23 Pour afficher toutes les fonctions Windows PowerShell, entrez la commande suivante :
PS> Get-Command -CommandType Function

Pour afficher des scripts externes dans le chemin de recherche de Windows PowerShell, entrez la commande suivante :
PS> Get-Command -CommandType ExternalScript

Obtention d'informations d'aide dtailles


Windows PowerShell propose une documentation d'aide dtaille pour toutes les applets de commande. Pour afficher les rubriques d'aide, utilisez l'applet de commande GetHelp. Par exemple, pour obtenir de l'aide sur l'applet de commande Get-Childitem, tapez :
get-help get-childitem

ou
get-childitem -?

Vous pouvez galement afficher une page la fois de chaque rubrique d'aide en utilisant les fonctions man et help. Pour les utiliser, tapez man ou help, puis le nom de l'applet de commande. Par exemple, pour afficher l'aide de l'applet de commande Get-Childitem, tapez :
man get-childitem

ou
help get-childitem

L'applet de commande Get-Help affiche galement des informations sur les rubriques conceptuelles dans Windows PowerShell. Les rubriques d'aide conceptuelles commencent par le prfixe about_ , comme about_line_editing. Pour afficher la liste des rubriques conceptuelles, tapez :
get-help about_*

Pour afficher une rubrique d'aide particulire, tapez le nom de la rubrique, par exemple :
get-help about_line_editing

24

Utilisation de noms de commandes familiers


Windows PowerShell permet aux utilisateurs de faire rfrence aux commandes par d'autres noms, appels alias. Grce ces alias, les utilisateurs ayant l'exprience d'autres environnements peuvent rutiliser les noms de commandes qu'ils connaissent pour effectuer des oprations similaires dans Windows PowerShell. Si nous n'abordons pas les alias dans le dtail, vous pouvez toujours les utiliser pour faire vos premiers pas dans Windows PowerShell. Un alias vous permet d'associer un nom de commande que vous tapez une autre commande. Par exemple, Windows PowerShell a une fonction interne nomme ClearHost qui efface le contenu de la fentre de sortie. Si vous tapez la commande cls ou clear une invite de commandes, Windows PowerShell l'interprte en tant qu'alias de la fonction Clear-Host et l'excute. Cette fonctionnalit aide les utilisateurs dans leur apprentissage de Windows PowerShell. En premier lieu, la plupart des utilisateurs Cmd.exe et UNIX connaissent par leur nom bon nombre de commandes de ces environnements, et bien que les quivalents Windows PowerShell puissent ne pas produire des rsultats identiques, leur forme est suffisamment proche pour leur permettre de les employer dans leur travail sans avoir pralablement mmoriser les noms Windows PowerShell. En second lieu, la principale source de frustration dans l'apprentissage d'un nouvel environnement lorsque l'utilisateur en connat dj un rside dans les erreurs dues la mmoire des doigts . Si vous avez utilis Cmd.exe pendant des annes, lorsque vous obtenez un cran complet de sortie et souhaitez le nettoyer, vous pouvez par rflexe taper la commande cls et appuyer sur la touche Entre. Sans l'alias de la fonction Clear-Host de Windows PowerShell, vous obtiendriez simplement le message d'erreur Le terme cls n'est pas reconnu en tant qu'applet de commande, fonction, programme excutable ou fichier de script et ne sauriez pas comment effacer le contenu de la sortie. Vous trouverez ci-dessous une courte liste des commandes Cmd.exe et UNIX courantes que vous pouvez utiliser dans Windows PowerShell. cat cd chdir dir echo erase mount move popd rm rmdir sleep

25 clear cls copy del diff h history kill lp ls ps pushd pwd r ren sort tee type write

Si par rflexe vous utilisez l'une de ces commandes et souhaitez apprendre le vritable nom de la commande Windows PowerShell native, vous pouvez utiliser la commande Get-Alias :
PS> Get-Alias cls CommandType ----------Alias Name ---cls Definition ---------Clear-Host

Pour une meilleure lisibilit des exemples, le Guide lmentaire de Windows PowerShell vite gnralement d'utiliser des alias. Toutefois, en savoir plus sur ces alias ds prsent reste utile si vous travaillez avec des extraits de code arbitraires provenant de Windows PowerShell ou d'une autre source ou souhaitez dfinir vos propres alias. La suite de cette section prsente les alias standard et explique comment dfinir les vtres.

Interprtation des alias standard


Contrairement aux alias dcrits plus haut, lesquels ont t conus pour la compatibilit des noms avec d'autres interfaces, les alias intgrs de Windows PowerShell sont gnralement conus dans l'optique de la concision. Ces noms plus courts peuvent tre taps rapidement, mais sont impossibles lire si vous ne savez pas quoi ils font rfrence. Windows PowerShell essaie de trouver un compromis entre clart et concision en fournissant un jeu d'alias standard bass sur des abrviations des verbes et substantifs courants. Cela permet de disposer d'un jeu principal d'alias pour les applets de commande courantes qui, ds lors que vous connaissez ces abrviations, deviennent lisibles. Par exemple, dans les alias standard, le verbe Get est abrg en g, le verbe Set en s, le substantif Item est abrg en i, le substantif Location en l et le substantif Command en cm. Voici un bref exemple pour en illustrer le fonctionnement. L'alias standard de Get-Item provient de la combinaison de g pour Get et de i pour Item : gi. L'alias standard de SetItem provient de la combinaison de s pour Set et de i pour Item : si. L'alias standard de

26 Get-Location provient de la combinaison de g pour Get et de l pour Location : gl. L'alias standard de Set-Location provient de la combinaison de s pour Set et de l pour Location : sl. L'alias standard de Get-Command provient de la combinaison de g pour Get et de cm pour Commande : gcm. Il n'existe pas d'applet de commande SetCommand, mais s'il en existait une, nous serions en mesure de deviner que l'alias standard proviendrait de s pour Set et de cm pour Command : scm. En outre, les personnes habitues aux alias Windows PowerShell qui rencontreraient scm seraient capables de deviner que cet alias fait rfrence Set-Command.

Cration d'alias
Vous pouvez crer vos propres alias l'aide de l'applet de commande Set-Alias. Par exemple, les instructions suivantes crent les alias d'applet de commande standard prsents dans Interprtation des alias standard :
Set-Alias Set-Alias Set-Alias Set-Alias Set-Alias -Name -Name -Name -Name -Name gi -Value Get-Item si -Value Set-Item gl -Value Get-Location sl -Value Set-Location gcm -Value Get-Command

En interne, Windows PowerShell utilise des commandes comme celles-ci au dmarrage, mais ces alias ne sont pas modifiables. Si vous essayez d'excuter l'une de ces commandes, vous obtenez une erreur indiquant que l'alias ne peut pas tre modifi. Par exemple :
PS> Set-Alias -Name gi -Value Get-Item Set-Alias : L'alias n'est pas inscriptible, car l'alias gi est constant ou en lecture seule et n'est pas accessible en criture. la ligne : 1 Caractre : 10 + Set-Alias <<<< -Name gi -Value Get-Item

Utilisation de l'extension par tabulation pour complter automatiquement des noms


Les environnements de ligne de commande offrent souvent un moyen de complter automatiquement les longs noms de fichiers ou de commandes, en acclrant la saisie des commandes et en fournissant des conseils. Windows PowerShell vous permet de

27 complter des noms de fichiers et d'applets de commande en appuyant sur la touche Tab. Remarque : L'extension par tabulation est contrle par la fonction interne TabExpansion. Dans la mesure o cette fonction peut tre modifie ou remplace, cette discussion constitue un guide du comportement de la configuration Windows PowerShell par dfaut. Pour complter automatiquement un nom de fichier ou de chemin d'accs partir des choix disponibles, tapez une partie du nom et appuyez sur la touche Tab. Windows PowerShell tend automatiquement le nom en fonction de la premire correspondance qu'il trouve. L'utilisation rpte de la touche Tab permet de parcourir tous les choix disponibles. L'extension par tabulation des noms d'applets de commande est lgrement diffrente. Pour utiliser l'extension par tabulation sur un nom d'applet de commande, tapez l'intgralit de la premire partie du nom (le verbe) et le trait d'union qui suit. Vous pouvez indiquer une plus grande partie du nom pour une correspondance partielle. Par exemple, si vous tapez get-co et appuyez sur la touche Tab, Windows PowerShell tend automatiquement votre saisie pour donner l'applet de commande Get-Command (remarquez que cela modifie galement la casse des lettres en leur forme standard). Si vous appuyez de nouveau sur la touche Tab, Windows PowerShell propose la place le seul autre nom d'applet de commande correspondant, Get-Content. Vous pouvez utiliser l'extension par tabulation plusieurs reprises sur la mme ligne. Par exemple, vous pouvez utiliser l'extension par tabulation sur le nom de l'applet de commande Get-Content en entrant :
PS> Get-Con<Tab>

Lorsque vous appuyez sur la touche Tab, la commande se dveloppe en :


PS> Get-Content

Vous pouvez ensuite spcifier partiellement le chemin d'accs au fichier journal Active Setup et utiliser de nouveau l'extension par tabulation :
PS> Get-Content c:\windows\acts<Tab>

Lorsque vous appuyez sur la touche Tab, la commande se dveloppe en :


PS> Get-Content C:\windows\actsetup.log

28 Remarque : Une limitation du processus d'extension par tabulation rside dans le fait que les tabulations sont toujours interprtes comme des tentatives pour complter un mot. Si vous copiez et collez un exemple de commande dans une console Windows PowerShell, veillez ce qu'il ne contienne aucune tabulation ; la prsence de tabulations donne des rsultats imprvisibles et certainement diffrents de ceux qui taient prvus.

Pipeline d'objets
Un pipeline agit comme une srie de segments de canal connects. Les lments qui parcourent le pipeline passent par chaque segment. Pour crer un pipeline dans Windows PowerShell, vous connectez des commandes au moyen de l'oprateur de pipeline (la barre verticale | ) et la sortie de chaque commande est utilise comme entre de la suivante. Les pipelines sont sans doute le concept le plus intressant des interfaces de ligne de commande. Correctement utiliss, ils permettent non seulement de rduire l'effort de saisie de commandes complexes, mais galement de simplifier la lecture du flux de travail dans les commandes. Une autre caractristique connexe et pratique du pipeline est que, dans la mesure o il opre sparment sur chaque lment, il n'est pas ncessaire de le modifier en fonction du nombre d'lments qu'il contient. En outre, chaque commande d'un pipeline (appel lment de pipeline ) passe gnralement sa sortie la commande suivante lment par lment. Cela rduit habituellement la demande en ressources des commandes complexes et vous permet de commencer immdiatement obtenir la sortie. Dans ce chapitre, nous expliquerons en quoi le pipeline Windows PowerShell diffre des pipelines de la plupart des environnements connus, puis ferons la dmonstration de quelques outils de base que vous pouvez utiliser pour contrler la sortie du pipeline et voir comment il fonctionne.

29

Fonctionnement du pipeline Windows PowerShell


La mise en pipeline fonctionne pratiquement partout dans Windows PowerShell. Bien que ce que vous voyez l'cran soit du texte, Windows PowerShell ne dirige pas du texte entre les commandes, mais des objets. La notation utilise pour les pipelines est semblable celle utilise dans d'autres environnements, de sorte qu' premire vue, il peut ne pas apparatre que Windows PowerShell introduit quelque chose de nouveau. Par exemple, si vous utilisez l'applet de commande Out-Host pour forcer un affichage page par page de la sortie d'une autre commande, la sortie ressemble juste du texte normal affich l'cran, divis en pages :
PS> Get-ChildItem -Path C:\WINDOWS\System32 | Out-Host -Paging Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\system32 Mode ----a---a---a---a---a---a---a---a---a---a---a---a---a--LastWriteTime ------------2005-10-22 11:04 PM 2004-08-04 8:00 AM 2004-08-04 8:00 AM 2004-08-04 8:00 AM 2004-08-04 8:00 AM 2004-08-04 8:00 AM 2004-08-04 8:00 AM 2004-08-04 8:00 AM 2004-08-04 8:00 AM 2004-08-04 8:00 AM 2004-08-04 8:00 AM 2003-02-21 6:50 PM 2006-01-25 3:35 PM Length -----315 68608 64512 183808 61952 129536 114688 194048 111104 4096 101888 143150 53760 Name ---$winnt$.inf access.cpl acctres.dll accwiz.exe acelpdec.ax acledit.dll aclui.dll activeds.dll activeds.tlb actmovie.exe actxprxy.dll admgmt.msc admparse.dll

<ESPACE> page suivante ; <ENTRE> ligne suivante ; Q quitter ...

La commande Out-Host -Paging est un lment de pipeline utile lorsque la sortie est longue et que vous souhaitez l'afficher lentement. Elle l'est aussi particulirement si l'opration sollicite fortement les ressources processeur. Dans la mesure o le traitement est transfr l'applet de commande Out-Host lorsqu'elle dispose d'une page complte prte afficher, les applets de commande qui la suivent dans le pipeline arrtent l'opration jusqu' ce que la page suivante de la sortie soit disponible. Vous pouvez l'observer si vous utilisez le Gestionnaire des tches de Windows pour surveiller l'utilisation de l'UC et de la mmoire par Windows PowerShell.

30 Excutez la commande suivante : Get-ChildItem C:\Windows -Recurse. Comparez l'utilisation de l'UC et de la mmoire par rapport cette commande : Get-ChildItem C:\Windows -Recurse | Out-Host -Paging. Ce que vous voyez l'cran est du texte, mais uniquement parce qu'il est ncessaire de reprsenter des objets sous forme de texte dans une fentre de console. Il s'agit rellement d'une simple reprsentation de ce qui se passe l'intrieur de Windows PowerShell. Par exemple, considrez l'applet de commande Get-Location. Si vous tapez Get-Location alors que votre emplacement actuel est la racine du lecteur C, vous obtenez la sortie suivante :
PS> Get-Location Path ---C:\

Si le contenu du pipeline Windows PowerShell tait du texte, l'mission d'une commande telle que Get-Location | Out-Host passerait de Get-Location Out-Host un jeu de caractres dans l'ordre dans lequel ils apparaissent l'cran. En d'autres termes, en ignorant les informations de titre, Out-Host recevrait en premier le caractre C , puis le caractre : , puis le caractre \ . L'applet de commande Out-Host ne pourrait pas dterminer la signification donner aux caractres fournis par l'applet de commande Get-Location. Au lieu d'utiliser du texte pour permettre aux commandes d'un pipeline de communiquer, Windows PowerShell utilise des objets. Du point de vue de l'utilisateur, les objets regroupent des informations connexes sous une forme qui facilite la manipulation de ces informations en tant qu'unit et extraient les lments spcifiques dont vous avez besoin. La commande Get-Location ne retourne pas du texte qui contient le chemin d'accs actuel. Elle retourne un package d'informations appel objet PathInfo qui contient le chemin d'accs actuel et quelques autres informations. L'applet de commande Out-Host envoie ensuite cet objet PathInfo l'cran, et Windows PowerShell dcide des informations afficher et de la manire de les afficher selon ses rgles de mise en forme. En fait, la sortie des informations du titre par l'applet de commande Get-Location est ajoute uniquement la fin du processus, au moment de la mise en forme des donnes en vue de leur affichage l'cran. Ce que vous voyez l'cran est une synthse des informations, et non une reprsentation complte de l'objet de sortie. Mais si les informations issues d'une commande Windows PowerShell peuvent tre plus nombreuses que celles qui sont visibles dans la fentre de la console, comment rcuprer celles qui ne le sont pas ? Comment consulter les donnes supplmentaires ? Et si vous souhaitez consulter les donnes dans un format diffrent de celui qu'utilise normalement Windows PowerShell ?

31 La suite de ce chapitre explique comment dcouvrir la structure d'objets Windows PowerShell spcifiques, en slectionnant des lments spcifiques et en les mettant en forme pour un affichage plus facile, et comment envoyer ces informations d'autres emplacements de sortie, tels que des fichiers et des imprimantes.

Consultation de la structure d'objets (Get-Member)


tant donn le rle si central des objets dans Windows PowerShell, plusieurs commandes natives ont t conues pour utiliser des types d'objets arbitraires. La plus importante d'entre elles est la commande Get-Member. La technique la plus simple pour analyser les objets retourns par une commande consiste en diriger la sortie vers l'applet de commande Get-Member. L'applet de commande Get-Member vous indique le nom formel du type d'objet et une liste complte de ses membres. Le nombre des lments retourns peut parfois tre crasant. Par exemple, un objet Process peut avoir plus de 100 membres. Pour afficher tous les membres d'un objet Process et paginer la sortie afin que vous puissiez en consulter l'intgralit, tapez :
PS> Get-Process | Get-Member | Out-Host -Paging

La sortie de cette commande sera semblable la suivante :


TypeName: System.Diagnostics.Process Name ---Handles Name NPM PM VM WS add_Disposed ... MemberType ---------AliasProperty AliasProperty AliasProperty AliasProperty AliasProperty AliasProperty Method Definition ---------Handles = Handlecount Name = ProcessName NPM = NonpagedSystemMemorySize PM = PagedMemorySize VM = VirtualMemorySize WS = WorkingSet System.Void add_Disposed(Event...

Nous pouvons rendre cette longue liste d'informations plus exploitable en appliquant un filtre de faon n'afficher que les lments qui nous intressent. La commande GetMember vous permet de ne rpertorier que les membres qui sont des proprits. Il existe plusieurs formes de proprits. L'applet de commande affiche tous les types de proprits si nous affectons la valeur Properties au paramtre Get-

32 MemberMemberType. La liste obtenue reste trs longue, mais un peu plus facile grer :
PS> Get-Process | Get-Member -MemberType Properties

TypeName: System.Diagnostics.Process Name ---Handles Name ... ExitCode ... Handle ... CPU ... Path ... MemberType ---------AliasProperty AliasProperty Property Property Definition ---------Handles = Handlecount Name = ProcessName System.Int32 ExitCode {get;} System.IntPtr Handle {get;}

ScriptProperty System.Object CPU {get=$this.Total... ScriptProperty System.Object Path {get=$this.Main...

Remarque : Les valeurs autorises de MemberType sont AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet et All. Il existe plus de 60 proprits pour un processus. La raison pour laquelle Windows PowerShell n'indique souvent que quelques-unes des proprits d'un objet connu est que les afficher toutes produirait un volume d'informations difficilement grable. Remarque : Windows PowerShell dtermine comment afficher un type d'objet en s'appuyant sur les informations stockes dans des fichiers XML dont le nom se termine par .format.ps1xml. Les donnes de mise en forme des objets Process, qui sont des objets .NET System.Diagnostics.Process, sont stockes dans PowerShellCore.format.ps1xml. Si vous devez consulter des proprits autres que celles qu'affiche Windows PowerShell par dfaut, vous devrez mettre en forme vous-mme les donnes de sortie. Vous pouvez pour ce faire utiliser les applets de commande Format.

33

Utilisation des commandes Format pour modifier l'affichage de la sortie


Windows PowerShell propose un jeu d'applets de commande qui vous permettent de contrler les proprits afficher pour des objets particuliers. Le nom de toutes ces applets de commande commence par le verbe Format. Elles vous permettent de slectionner une ou plusieurs proprits afficher. Les applets de commande Format sont Format-Wide, Format-List, Format-Table et Format-Custom. Dans ce guide, nous dcrirons uniquement les applets de commande Format-Wide, Format-List et Format-Table. Chaque applet de commande Format a des proprits qui seront utilises par dfaut si vous ne spcifiez pas de proprits spcifiques afficher. Chaque applet de commande utilise galement le mme nom de paramtre, Property, pour spcifier les proprits afficher. Parce que Format-Wide n'affiche qu'une seule proprit, son paramtre Property n'accepte qu'une seule valeur, contrairement celui de Format-List et Format-Table, qui accepte une liste de noms de proprits. Si vous utilisez la commande Get-Process -Name powershell avec 2 instances de Windows PowerShell en cours d'excution, vous obtenez une sortie similaire la suivante :
Handles ------995 331 NPM(K) -----9 9 PM(K) ----30308 23284 WS(K) VM(M) ----- ----27996 152 29084 143 CPU(s) -----2.73 1.06 Id -2760 3448 ProcessName ----------powershell powershell

Dans la suite de cette section, nous dcouvrirons comment utiliser les applets de commande Format pour modifier l'affichage de la sortie de cette commande.

Utilisation de Format-Wide pour une sortie un seul lment


L'applet de commande Format-Wide, par dfaut, affiche uniquement la proprit par dfaut d'un objet. Les informations associes chaque objet s'affichent dans une seule colonne :
PS> Get-Process -Name powershell | Format-Wide powershell powershell

Vous pouvez galement spcifier une proprit autre que celle par dfaut :
PS> Get-Process -Name powershell | Format-Wide -Property Id

34

2760

3448

Contrle de l'affichage de Format-Wide avec Column


Avec l'applet de commande Format-Wide, vous ne pouvez afficher qu'une proprit la fois. Cela la rend utile pour afficher des listes simples o ne figure qu'un lment par ligne. Pour obtenir une liste simple, affectez au paramtre Column la valeur 1 en tapant :
Get-Command Format-Wide -Property Name -Column 1

Utilisation de Format-List pour une vue Liste


L'applet de commande Format-List affiche un objet sous forme de liste, avec chaque proprit libelle et affiche sur une ligne distincte :
PS> Get-Process -Name powershell | Format-List Id Handles CPU Name Id Handles CPU Name : : : : : : : : 2760 1242 3.03125 powershell 3448 328 1.0625 powershell

Vous pouvez spcifier autant de proprits que vous le souhaitez :


PS> Get-Process -Name powershell | Format-List -Property ProcessName,FileVersion ,StartTime,Id

ProcessName FileVersion StartTime Id ProcessName FileVersion StartTime Id

: : : : : : : :

powershell 1.0.9567.1 2006-05-24 13:42:00 2760 powershell 1.0.9567.1 2006-05-24 13:54:28 3448

35

Obtention d'informations dtailles en utilisant Format-List avec des caractres gnriques


L'applet de commande Format-List vous permet d'utiliser un caractre gnrique comme valeur de son paramtre Property. Cela vous permet d'afficher des informations dtailles. Les objets incluent souvent plus d'informations que vous n'en avez besoin. C'est pourquoi, par dfaut, Windows PowerShell n'affiche pas toutes les valeurs de proprits. Pour afficher toutes les proprits d'un objet, utilisez la commande FormatList -Property *. La commande suivante gnre plus de 60 lignes de sortie pour un seul processus :
Get-Process -Name powershell | Format-List -Property *

Bien que la commande Format-List soit pratique pour afficher le dtail, si vous souhaitez une vue d'ensemble de sortie comprenant de nombreux lments, un tableau plus simple est souvent plus utile.

Utilisation de Format-Table pour une sortie sous forme de tableau


Si vous utilisez l'applet de commande Format-Table sans nom de proprit spcifi pour mettre en forme la sortie de la commande Get-Process, vous obtenez exactement la mme sortie que si vous n'aviez appliqu aucune mise en forme. La raison en est que les processus s'affichent habituellement sous forme de tableau, comme la plupart des objets Windows PowerShell.
PS> Get-Process -Name powershell | Format-Table Handles ------1488 332 NPM(K) -----9 9 PM(K) ----31568 23140 WS(K) VM(M) ----- ----29460 152 632 141 CPU(s) -----3.53 1.06 Id -2760 3448 ProcessName ----------powershell powershell

Amlioration de la sortie de Format-Table (AutoSize)


Bien qu'un affichage sous forme de tableau soit utile pour afficher de nombreuses informations comparables, il peut tre difficile interprter s'il est trop troit pour les donnes. Par exemple, si vous essayez d'afficher les proprits Path (chemin d'accs), Name (nom), ID et Company (socit) d'un processus, vous obtenez une sortie tronque pour le chemin d'accs du processus et la colonne Company :
PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company Path ---Name ---Id Company -- -------

36
C:\Program Files... powershell 2836 Microsoft Corpor...

Si vous spcifiez le paramtre AutoSize (redimensionnement automatique) lorsque vous excutez la commande Format-Table, Windows PowerShell calculera les largeurs de colonnes en fonction des donnes qui seront effectivement affiches. La colonne Path devient ainsi lisible, mais la colonne Company reste tronque :
PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company AutoSize Path Name Id Company -------- ------C:\Program Files\Windows PowerShell\v1.0\powershell.exe powershell 2836 Micr...

L'applet de commande Format-Table peut encore tronquer des donnes, mais seulement la fin de l'cran. Les proprits, hormis la dernire affiche, se voient dotes d'une taille suffisante pour afficher correctement leur lment de donnes le plus long. Vous pouvez constater que le nom de la socit est visible, mais que le chemin d'accs est tronqu si vous changez les positions de Path et Company dans la liste de valeurs de Property :
PS> Get-Process -Name powershell | Format-Table -Property Company,Name,Id,Path AutoSize Company Name Id Path ----------- ---Microsoft Corporation powershell 2836 C:\Program Files\Windows PowerShell\v1...

La commande Format-Table suppose que plus une proprit est proche du dbut la liste, plus elle est importante. Elle essaie donc d'afficher compltement les proprits les plus proches du dbut. Si la commande Format-Table ne peut pas afficher toutes les proprits, elle supprime des colonnes de l'affichage et fournit un avertissement. Vous pouvez observer ce comportement si vous placez la proprit Name en dernire position dans la liste :
PS> Get-Process -Name powershell | Format-Table -Property Company,Path,Id,Name AutoSize AVERTISSEMENT : la colonne Name ne tient pas l'cran et a t supprime. Company I d ---------Microsoft Corporation C:\Program Files\Windows PowerShell\v1.0\powershell.exe 6 Path

37 Dans la sortie ci-dessus, la colonne ID est tronque pour la faire tenir dans la liste et les en-ttes de colonnes sont empils. Le redimensionnement automatique des colonnes ne produit pas toujours l'effet escompt.

Renvoi la ligne dans la sortie en colonnes de Format-Table (Wrap)


Vous pouvez forcer le renvoi la ligne de longues donnes Format-Table dans sa colonne d'affichage en utilisant le paramtre Wrap. L'utilisation du seul paramtre Wrap ne donnera pas ncessairement le rsultat voulu, dans la mesure o les paramtres par dfaut sont utiliss si vous ne spcifiez pas galement AutoSize :
PS> Get-Process -Name powershell | Format-Table -Wrap -Property Name,Id,Company, Path Name ---powershell Id Company Path -- ---------2836 Microsoft Corporati C:\Program Files\Wi on ndows PowerShell\v1 .0\powershell.exe

L'utilisation du paramtre Wrap seul prsente toutefois l'avantage de ne pas trop ralentir le traitement. Si vous effectuez un listage de fichiers rcursif sur un important systme de rpertoires et utilisez AutoSize, l'opration peut demander trs longtemps et utiliser beaucoup de mmoire avant que ne s'affichent les premiers lments de la sortie. Si vous ne vous proccupez pas de la charge systme, AutoSize fonctionne bien avec le paramtre Wrap. Les premires colonnes occupent toujours la largeur dont elles ont besoin pour afficher des lments sur une ligne, comme lorsque vous spcifiez AutoSize sans le paramtre Wrap. La seule diffrence est, s'il est ncessaire, le renvoi la ligne dans la dernire colonne :
PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Name,I d,Company,Path Name Id Company Path ----- ---------powershell 2836 Microsoft Corporation C:\Program Files\Windows PowerShell\v1.0\ powershell.exe

Certaines colonnes peuvent ne pas s'afficher si vous spcifiez en premier les colonnes les plus larges, de sorte qu'il est plus sr de spcifier d'abord les plus petits lments de donnes. Dans l'exemple suivant, nous spcifions en premier l'lment de chemin d'accs extrmement large, et mme avec le renvoi la ligne, nous perdons toujours la dernire colonne, Name :
PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Path,I d,Company,Name

38

AVERTISSEMENT : la colonne Name ne tient pas l'cran et a t supprime. Path Id Company ----- ------C:\Program Files\Windows PowerShell\v1.0\powershell.exe 2836 Microsoft Corporat ion

Organisation de la sortie en tableau (-GroupBy)


GroupBy est un autre paramtre utile pour contrler la sortie sous forme de tableau. Il peut tre difficile de comparer de longues listes disposes en tableau. Le paramtre GroupBy effectue des regroupements dans la sortie selon une valeur de proprit. Par exemple, nous pouvons regrouper des processus par socit pour un examen plus facile, en omettant la valeur Company de la liste des proprits :
PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Name,I d,Path -GroupBy Company

Company: Microsoft Corporation Name Id Path ----- ---powershell 1956 C:\Program Files\Windows PowerShell\v1.0\powershell.exe powershell 2656 C:\Program Files\Windows PowerShell\v1.0\powershell.exe

Redirection de donnes avec les applets de commande Out-*


Windows PowerShell fournit plusieurs applets de commande qui vous permettent de contrler directement la sortie des donnes. Ces applets de commande partagent deux caractristiques importantes. En premier lieu, elles transforment gnralement des donnes en texte. Elles le font parce qu'elles produisent des donnes destines des composants systme qui requirent du texte en entre. Cela signifie qu'elles doivent reprsenter les objets sous forme de texte. Par consquent, le texte est mis en forme tel que vous le voyez dans la fentre de la console Windows PowerShell. En second lieu, ces applets de commande utilisent le verbe Windows PowerShell Out, car elles font sortir les informations de Windows PowerShell. L'applet de commande Out-

39 Host ne fait pas exception : l'cran de la fentre de l'hte se trouve en dehors de Windows PowerShell. Ce point est important, car lorsque des donnes sont envoyes l'extrieur de Windows PowerShell, elles sont en fait supprimes. Vous pouvez l'observer si vous essayez de crer un pipeline qui pagine des donnes pour leur envoi la fentre de l'hte, puis tentez une prsentation sous forme de liste, comme illustr ici :
PS> Get-Process | Out-Host -Paging | Format-List

Vous pouvez vous attendre ce que la commande affiche des pages d'informations de processus dans un format de liste. la place, elle affiche la liste tabulaire par dfaut :
Handles ------101 ... 618 257 ... NPM(K) -----5 18 8 PM(K) ----1076 39348 9752 WS(K) VM(M) ----- ----3316 32 51108 16828 143 79 CPU(s) -----0.05 211.20 3.02 Id ProcessName -- ----------2888 alg 740 explorer 2560 explorer

<ESPACE> page suivante ; <ENTRE> ligne suivante ; Q quitter ...

L'applet de commande Out-Host envoie les donnes directement la console, de sorte que la commande Format-List ne reoit rien mettre en forme. La faon correcte de structurer cette commande consiste placer l'applet de commande Out-Host la fin du pipeline, comme indiqu ci-dessous. Les donnes de processus sont alors prsentes sous forme de liste avant d'tre pagines et affiches.
PS> Get-Process | Format-List | Out-Host -Paging

Id Handles CPU Name ... Id Handles CPU Name Id Handles CPU Name ...

: : : :

2888 101 0.046875 alg

: : : : : : : :

740 612 211.703125 explorer 2560 257 3.015625 explorer

<ESPACE> page suivante ; <ENTRE> ligne suivante ; Q quitter

40
...

Cette rgle est valable pour toutes les applets de commande Out. Une applet de commande Out doit toujours apparatre la fin du pipeline. Remarque : Toutes les applets de commande Out restituent la sortie sous forme de texte, en utilisant la mise en forme en vigueur pour la fentre de la console, y compris en ce qui concerne les limites de longueurs de lignes.

Pagination de la sortie de la console (Out-Host)


Par dfaut, Windows PowerShell envoie les donnes la fentre de l'hte, ce que fait exactement l'applet de commande Out-Host. Ainsi que nous l'avons vu prcdemment, l'applet de commande Out-Host sert principalement paginer les donnes. Par exemple, la commande suivante utilise Out-Host pour paginer la sortie de l'applet de commande Get-Command :
PS> Get-Command | Out-Host -Paging

Vous pouvez galement utiliser la fonction more pour paginer des donnes. Dans Windows PowerShell, more est une fonction qui appelle Out-Host -Paging. La commande suivante montre l'utilisation de la fonction more pour paginer la sortie de GetCommand :
PS> Get-Command | more

Si vous incluez un ou plusieurs noms de fichiers comme arguments de la fonction more, celle-ci lira les fichiers spcifis et paginera leur contenu en vue de leur envoi l'hte :
PS> more c:\boot.ini [boot loader] timeout=5 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] ...

Suppression de la sortie (Out-Null)


L'applet de commande Out-Null est conue pour supprimer immdiatement toute entre qu'elle reoit. Cela est particulirement utile pour supprimer les donnes inutiles que vous obtenez comme effet secondaire de l'excution d'une commande. Lorsque vous tapez la commande suivante, vous ne rcuprez rien de la commande :
PS> Get-Command | Out-Null

41 L'applet de commande Out-Null ne supprime pas la sortie d'erreurs. Par exemple, si vous entrez la commande suivante, un message s'affiche pour vous informer que Windows PowerShell ne reconnat pas Is-NotACommand :
PS> Get-Command Is-NotACommand | Out-Null Get-Command : Le terme Is-NotACommand n'est pas reconnu en tant qu'applet de commande, fonction, programme excutable ou fichier de script. la ligne : 1 Caractre : 12 + Get-Command <<<< Is-NotACommand | Out-Null

Impression de donnes (Out-Printer)


Vous pouvez imprimer des donnes l'aide de l'applet de commande Out-Printer. L'applet de commande Out-Printer utilisera votre imprimante par dfaut si vous ne fournissez pas de nom d'imprimante. Vous pouvez utiliser une imprimante Windows en spcifiant son nom d'affichage. Il n'est pas ncessaire d'effectuer un quelconque mappage de port d'imprimante, ni mme de disposer d'une imprimante physique. Par exemple, si vous avez install les outils Microsoft Office Document Imaging, vous pouvez envoyer les donnes un fichier image en tapant :
PS> Get-Command Get-Command | Out-Printer -Name "Microsoft Office Document Image Writer"

Enregistrement de donnes (Out-File)


Vous pouvez envoyer la sortie un fichier plutt qu' la fentre de la console en utilisant l'applet de commande Out-File. La ligne de commande suivante envoie une liste de processus au fichier C:\temp\processlist.txt :
PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt

Le rsultat de l'utilisation de l'applet de commande Out-File peut ne pas tre celui auquel vous vous attendez si vous tes habitu la redirection de sortie traditionnelle. Pour comprendre son comportement, vous devez connatre le contexte dans lequel opre l'applet de commande Out-File. Par dfaut, l'applet de commande Out-File cre un fichier Unicode. Ce comportement par dfaut est le meilleur sur le long terme, mais il signifie que les outils qui attendent des fichiers ASCII ne fonctionneront pas correctement avec le format de sortie par dfaut. Vous pouvez dfinir le format de sortie par dfaut comme tant ASCII au moyen du paramtre Encoding :
PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII

42 Out-file met en forme le contenu des fichiers de sorte qu'il ressemble la sortie de la console. La sortie est donc tronque de la mme manire que dans une fentre de console dans la plupart des cas. Par exemple, si vous excutez la commande suivante :
PS> Get-Command | Out-File -FilePath c:\temp\output.txt

La sortie ressemblera celle-ci :


CommandType ----------Cmdlet Cmdlet ... Name ---Add-Content Add-History Definition ---------Add-Content [-Path] <String[... Add-History [[-InputObject] ...

Pour obtenir une sortie qui ne force pas le renvoi la ligne pour l'adaptation la largeur de l'cran, vous pouvez utiliser le paramtre Width afin de spcifier la largeur de ligne. Width tant un paramtre entier 32 bits, la valeur maximale qu'il peut avoir est 2147483647. Tapez ce qui suit pour dfinir la largeur de ligne sur cette valeur maximale :
Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647

L'applet de commande Out-File est trs utile lorsque vous souhaitez enregistrer la sortie telle qu'elle se serait affiche sur la console. Pour un meilleur contrle sur le format de sortie, vous avez besoin d'outils plus labors. Nous nous y intresserons dans le chapitre suivant, o nous fournirons galement des informations sur la manipulation des objets.

Navigation dans Windows PowerShell


Les dossiers sont une fonctionnalit d'organisation connue de l'interface Explorateur Windows, de Cmd.exe et d'outils UNIX tels que BASH. Les dossiers, ou rpertoires, comme ils sont plus communment appels, sont un concept utile pour organiser des fichiers et autres rpertoires. Les systmes d'exploitation de la famille UNIX l'tendent en traitant comme un fichier tout ce qui peut l'tre ; les connexions rseau et de matriel spcifiques apparaissent comme des fichiers dans des dossiers particuliers. Cette approche ne garantit pas que le contenu est lisible ou utilisable par des applications donnes, mais simplifie la recherche d'lments prcis. Les outils qui numrent ou effectuent des recherches dans les fichiers et dossiers fonctionnent galement avec ces priphriques. Vous pouvez aussi faire rfrence un lment spcifique en utilisant le chemin d'accs au fichier qui le reprsente.

43 D'une manire analogue, l'infrastructure Windows PowerShell prend en charge l'exposition en tant que lecteur Windows PowerShell de pratiquement tout ce qui peut tre explor par navigation comme un lecteur de disque Microsoft Windows standard ou un systme de fichiers UNIX. Un lecteur Windows PowerShell ne reprsente pas ncessairement un vritable lecteur, qu'il soit local ou rseau. Ce chapitre discute principalement de la navigation pour les systmes de fichiers, mais les concepts s'appliquent aussi aux lecteurs Windows PowerShell non associs des systmes de fichiers.

Gestion de l'emplacement actuel dans Windows PowerShell


Lorsque vous naviguez dans des systmes de dossiers dans l'Explorateur Windows, vous disposez gnralement d'un emplacement de travail spcifique, savoir le dossier ouvert actif. Les lments du dossier actif peuvent tre manipuls facilement en cliquant dessus. Pour les interfaces de ligne de commande telles que Cmd.exe, lorsque vous vous trouvez dans le mme dossier qu'un fichier particulier, vous pouvez y accder en spcifiant un nom relativement court au lieu d'avoir spcifier son chemin d'accs complet. Le rpertoire actif est appel rpertoire de travail . Windows PowerShell utilise le substantif Location pour faire rfrence au rpertoire de travail et implmente une famille d'applets de commande pour examiner et grer votre emplacement.

Obtention de votre emplacement actuel (Get-Location)


Pour dterminer le chemin d'accs de votre emplacement de rpertoire actif, entrez la commande Get-Location :
PS> Get-Location Path ---C:\Documents and Settings\PowerUser

Remarque : L'applet de commande Get-Location est similaire la commande pwd de l'environnement BASH. L'applet de commande Set-Location est similaire la commande cd de Cmd.exe.

44

Dfinition de votre emplacement actuel (Set-Location)


La commande Get-Location est utilise avec la commande Set-Location. La commande Set-Location vous permet de spcifier votre emplacement de rpertoire actif.
PS> Set-Location -Path C:\Windows

Aprs avoir entr la commande, vous remarquerez que vous ne recevez aucune information sur l'effet produit. La plupart des commandes Windows PowerShell qui effectuent une action gnrent peu ou pas de sortie, car celle-ci n'est pas toujours utile. Pour vrifier que le changement de rpertoire a bien t effectu, lorsque vous entrez la commande Set-Location, incluez le paramtre -PassThru :
PS> Set-Location -Path C:\Windows -PassThru Path ---C:\WINDOWS

Le paramtre -PassThru peut tre utilis avec de nombreuses commandes Set dans Windows PowerShell afin de retourner des informations sur le rsultat lorsque aucune sortie n'est fournie par dfaut. Vous pouvez spcifier des chemins d'accs relatifs votre emplacement actuel de la mme faon que dans la plupart des environnements de commande UNIX et Windows. Dans la notation standard des chemins d'accs relatifs, un point (.) reprsente votre dossier actif et deux points (..) reprsentent le rpertoire parent de votre emplacement actuel. Par exemple, si vous vous trouvez dans le dossier C:\Windows, un point (.) reprsente C:\Windows et deux points (..) reprsentent C:. Vous pouvez faire de la racine du lecteur C: votre emplacement actuel en tapant :
PS> Set-Location -Path .. -PassThru Path ---C:\

La mme technique fonctionne sur les lecteurs Windows PowerShell qui ne sont pas des lecteurs de systme de fichiers, tels que HKLM:. Vous pouvez dfinir votre emplacement sur la cl HKLM\Software du Registre en tapant :
PS> Set-Location -Path HKLM:\SOFTWARE -PassThru Path ---HKLM:\SOFTWARE

45 Vous pouvez ensuite remplacer l'emplacement du rpertoire par le rpertoire parent, qui est la racine du lecteur Windows PowerShell HKLM: en utilisant un chemin d'accs relatif :
PS> Set-Location -Path .. -PassThru Path ---HKLM:\

Vous pouvez taper Set-Location ou utiliser l'un des alias Windows PowerShell intgrs pour Set-Location (cd, chdir ou sl). Par exemple :
cd -Path C:\Windows chdir -Path .. -PassThru sl -Path HKLM:\SOFTWARE -PassThru

Enregistrement et rappel des emplacements rcents (PushLocation et Pop-Location)


Lorsque vous changez d'emplacement, il est utile de conserver une trace des emplacements antrieurs et de pouvoir y retourner. L'applet de commande PushLocation de Windows PowerShell cre un historique ordonn (une pile ) des chemins d'accs aux rpertoires o vous tes all, et vous pouvez remonter cet historique au moyen de l'applet de commande complmentaire Pop-Location. Par exemple, une session de Windows PowerShell dmarre en gnral dans le rpertoire de base de l'utilisateur.
PS> Get-Location Path ---C:\Documents and Settings\PowerUser

Remarque : Le mot pile a une signification spciale dans de nombreux paramtres de programmation, y compris le .NET. Comme pour une pile physique d'lments, le dernier lment que vous placez sur la pile est le premier que vous pouvez en

46 extraire. L'ajout d'un lment une pile est souvent appel opration push . L'extraction d'un lment de la pile est souvent appele opration pop . Pour placer l'emplacement actuel sur la pile, puis passer au dossier Local Settings, tapez :
PS> Push-Location -Path "Local Settings"

Vous pouvez ensuite placer l'emplacement Local Settings sur la pile et passer au dossier Temp en tapant :
PS> Push-Location -Path Temp

Vous pouvez vrifier que vous avez chang de rpertoire en entrant la commande GetLocation :
PS> Get-Location Path ---C:\Documents and Settings\PowerUser\Local Settings\Temp

Vous pouvez ensuite revenir au rpertoire le plus rcemment visit en entrant la commande Pop-Location, et vrifier la modification en entrant la commande GetLocation :
PS> Pop-Location PS> Get-Location Path ---C:\Documents and Settings\me\Local Settings

Comme avec Set-Location, vous pouvez inclure le paramtre -PassThru lorsque vous entrez l'applet de commande Pop-Location pour afficher le rpertoire que vous avez entr :
PS> Pop-Location -PassThru Path ---C:\Documents and Settings\PowerUser

Vous pouvez galement utiliser les applets de commande Location avec des chemins d'accs rseau. Si vous disposez d'un serveur FS01 sur lequel il existe un partage nomm Public, vous pouvoir modifier votre emplacement en tapant :

47
Set-Location \\FS01\Public

ou
Push-Location \\FS01\Public

Vous pouvez utiliser les commandes Push-Location et Set-Location pour remplacer l'emplacement par tout lecteur disponible. Par exemple, si vous disposez d'un lecteur de CD-ROM local mapp la lettre D qui contient un CD de donnes, vous pouvez accder l'emplacement du lecteur de CD en entrant la commande Set-Location D:. Si le lecteur est vide, le message d'erreur suivant s'affiche :
PS> Set-Location D: Set-Location : Impossible de trouver le chemin d'accs D:\ , car il n'existe pas.

Lorsque vous utilisez une interface de ligne de commande, l'utilisation de l'Explorateur Windows pour examiner les lecteurs physiques disponibles n'est pas pratique. En outre, l'Explorateur Windows ne vous montre pas tous les lecteurs Windows PowerShell. Windows PowerShell fournit un jeu de commandes pour la gestion de ses lecteurs, comme nous allons le voir dans la prochaine section.

Gestion des lecteurs Windows PowerShell


Un lecteur Windows PowerShell est un emplacement de magasin de donnes auquel vous pouvez accder de la mme manire que pour un lecteur de systme de fichiers dans Windows PowerShell Les fournisseurs de Windows PowerShell crent des lecteurs pour vous, comme les lecteurs de systme de fichiers (y compris C: et D:), les lecteurs de Registre (HKCU: et HKLM:) et le lecteur de certificats (Cert:), mais vous pouvez aussi crer les vtres. Ces lecteurs sont trs utiles, mais ils ne sont disponibles que dans Windows PowerShell. Vous ne pouvez pas y accder en utilisant d'autres outils Windows, tels que l'Explorateur Windows ou Cmd.exe. Windows PowerShell utilise le substantif PSDrive pour les commandes qui fonctionnent avec les lecteurs Windows PowerShell. Pour obtenir une liste des lecteurs Windows PowerShell de votre session, utilisez l'applet de commande Get-PSDrive.
PS> Get-PSDrive

48
Name ---A Alias C cert D Env Function HKCU HKLM Variable Provider -------FileSystem Alias FileSystem Certificate FileSystem Environment Function Registry Registry Variable Root ---A:\ C:\ \ D:\ CurrentLocation ---------------

...And Settings\me

HKEY_CURRENT_USER HKEY_LOCAL_MACHINE

Bien que les lecteurs affichs varient selon les lecteurs prsents sur votre systme, la liste sera similaire la sortie de la commande Get-PSDrive prsente ci-dessus. Les lecteurs de systme de fichiers sont un sous-ensemble des lecteurs Windows PowerShell. Les lecteurs de systme de fichiers sont identifiables l'entre FileSystem de la colonne Provider (fournisseur). (Les lecteurs de systme de fichiers de Windows PowerShell sont pris en charge par le fournisseur FileSystem (systme de fichiers) de Windows PowerShell.) Pour consulter la syntaxe de l'applet de commande Get-PSDrive, tapez une commande Get-Command avec le paramtre Syntax :
PS> Get-Command -Name Get-PSDrive -Syntax Get-PSDrive [[-Name] <String[]>] [-Scope <String>] [-PSProvider <String[]>] [-V erbose] [-Debug] [-ErrorAction <ActionPreference>] [-ErrorVariable <String>] [OutVariable <String>] [-OutBuffer <Int32>]

Le paramtre PSProvider vous permet d'afficher uniquement les lecteurs Windows PowerShell pris en charge par un fournisseur particulier. Par exemple, pour afficher uniquement les lecteurs Windows PowerShell pris en charge par le fournisseur FileSystem de Windows PowerShell, tapez une commande Get-PSDrive avec le paramtre PSProvider et la valeur FileSystem :
PS> Get-PSDrive -PSProvider FileSystem Name ---A C D Provider -------FileSystem FileSystem FileSystem Root ---A:\ C:\ D:\ CurrentLocation --------------...nd Settings\PowerUser

Pour consulter les lecteurs Windows PowerShell qui reprsentent des ruches du Registre, utilisez le paramtre PSProvider afin d'afficher uniquement les lecteurs Windows PowerShell pris en charge par le fournisseur Registry de Windows PowerShell :

49
PS> Get-PSDrive -PSProvider Registry

Name ---HKCU HKLM

Provider -------Registry Registry

Root ---HKEY_CURRENT_USER HKEY_LOCAL_MACHINE

CurrentLocation ---------------

Vous pouvez galement utiliser les applets de commande Location standard avec les lecteurs Windows PowerShell :
PS> Set-Location HKLM:\SOFTWARE PS> Push-Location .\Microsoft PS> Get-Location

Path ---HKLM:\SOFTWARE\Microsoft

Ajout de nouveaux lecteurs Windows PowerShell (NewPSDrive)


Vous pouvez ajouter vos propres lecteurs Windows PowerShell en utilisant la commande New-PSDrive. Pour obtenir la syntaxe de la commande New-PSDrive, entrez la commande Get-Command avec le paramtre Syntax :
PS> Get-Command -Name New-PSDrive -Syntax New-PSDrive [-Name] <String> [-PSProvider] <String> [-Root] <String> [-Descript ion <String>] [-Scope <String>] [-Credential <PSCredential>] [-Verbose] [-Debug ] [-ErrorAction <ActionPreference>] [-ErrorVariable <String>] [-OutVariable <St ring>] [-OutBuffer <Int32>] [-WhatIf] [-Confirm]

Pour crer un lecteur Windows PowerShell, vous devez fournir trois paramtres : le nom du lecteur (vous pouvez utiliser tout nom Windows PowerShell valide) ; le fournisseur Windows PowerShell (utilisez FileSystem pour les emplacements du systme de fichiers et Registry pour les emplacements du Registre) ; la racine, autrement dit, le chemin d'accs la racine du nouveau lecteur.

Par exemple, vous pouvez crer un lecteur nomm Office mapp au dossier qui contient les applications Microsoft Office de votre ordinateur, comme C:\Program Files\Microsoft Office\OFFICE11. Pour crer le lecteur, tapez la commande suivante :
PS> New-PSDrive -Name Office -PSProvider FileSystem -Root "C:\Program Files\Micr

50
osoft Office\OFFICE11" Name ---Office Provider -------FileSystem Root ---C:\Program Files\Microsoft Offic... CurrentLocation ---------------

Remarque : En rgle gnrale, les chemins d'accs ne respectent pas la casse. La rfrence au nouveau lecteur Windows PowerShell obit au mme schma que pour tout autre lecteur Windows PowerShell : vous spcifiez son nom, suivi des deux-points (:). Un lecteur Windows PowerShell peut simplifier bon nombre de tches. Par exemple, certaines des cls les plus importantes du Registre Windows ont des chemins d'accs extrmement longs, ce qui rend leur accs et leur mmorisation quelque peu fastidieux. Des informations de configuration essentielles rsident sous HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion. Pour afficher et modifier des lments de la cl de Registre CurrentVersion, vous pouvez crer un lecteur Windows PowerShell qui aura cette cl pour racine en tapant :
PS> New-PSDrive -Name cvkey -PSProvider Registry -Root HKLM\Software\Microsoft\W indows\CurrentVersion

Name ---cvkey

Provider -------Registry

Root ---HKLM\Software\Microsoft\Windows\...

CurrentLocation ---------------

Vous pouvez ensuite accder au lecteur cvkey: comme avec n'importe quel autre lecteur :
PS> cd cvkey:

- ou PS> Set-Location cvkey: -PassThru

Path ---cvkey:\

L'applet de commande New-PsDrive ajoute le nouveau lecteur uniquement la session de console active. Si vous quittez la console ou fermez la fentre Windows PowerShell, le nouveau lecteur est perdu. Pour enregistrer un lecteur Windows PowerShell, utilisez

51 l'applet de commande Export-Console afin d'exporter la console active, puis le paramtre de PowerShell.exe PSConsoleFile pour l'importer dans une nouvelle session. Vous pouvez aussi ajouter le nouveau lecteur votre profil Windows PowerShell.

Suppression de lecteurs Windows PowerShell (RemovePSDrive)


Vous pouvez supprimer des lecteurs Windows PowerShell en utilisant l'applet de commande Remove-PSDrive. L'applet de commande Remove-PSDrive est facile utiliser ; pour supprimer un lecteur Windows PowerShell spcifique, vous fournissez simplement son nom. Par exemple, si vous avez ajout le lecteur Windows PowerShell Office:, comme vu dans la rubrique New-PSDrive, vous pouvez le supprimer en tapant :
PS> Remove-PSDrive -Name Office

Pour supprimer le lecteur Windows PowerShell cvkey:, galement vu dans la rubrique New-PSDrive, utilisez la commande suivante :
PS> Remove-PSDrive -Name cvkey

Il est facile de supprimer un lecteur Windows PowerShell, mais vous ne pouvez pas le faire tant que vous vous trouvez sur ce lecteur. Par exemple :
PS> cd office: PS Office:\> remove-psdrive -name office Remove-PSDrive : Impossible de supprimer le lecteur Office , car il est en cours d'utilisation. la ligne : 1 Caractre : 15 + remove-psdrive <<<< -name office

Ajout et suppression de lecteurs l'extrieur de Windows PowerShell


Windows PowerShell dtecte les lecteurs de systme de fichiers ajouts ou supprims dans Windows, y compris les lecteurs rseau mapps, les lecteurs USB connects et les lecteurs supprims au moyen de la commande net use ou des mthodes WScript.NetworkMapNetworkDrive et RemoveNetworkDrive d'un script WSH (Windows Script Host).

52

Utilisation de fichiers, dossiers et cls de Registre


Windows PowerShell utilise le substantif Item pour faire rfrence aux lments situs sur un lecteur Windows PowerShell Avec le fournisseur FileSystem de Windows PowerShell, un Item peut tre un fichier, un dossier ou le lecteur Windows PowerShell Rpertorier et utiliser ces lments est une tche de base essentielle dans la plupart des paramtres administratifs, c'est pourquoi nous souhaitons discuter de ces tches en dtail.

numration de fichiers, dossiers et cls de Registre (GetChildItem)


L'obtention d'une collection d'lments d'un emplacement particulier tant une tche particulirement courante, l'applet de commande Get-ChildItem est conue spcifiquement pour retourner tous les lments situs dans un conteneur tel qu'un dossier. Si vous souhaitez retourner tous les fichiers et dossiers contenus directement dans le dossier C:\Windows, tapez :
PS> Get-ChildItem -Path C:\Windows Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows Mode ----a---a---a--... LastWriteTime ------------2006-05-16 8:10 AM 2005-11-29 3:16 PM 2005-10-23 11:21 PM Length -----0 97 3848 Name ---0.log acc1.txt actsetup.log

La liste est similaire celle que vous obtenez en entrant la commande dir dans Cmd.exe ou ls dans un environnement de commande UNIX. Vous pouvez effectuer des listages trs complexes en utilisant les paramtres de l'applet de commande Get-ChildItem. Nous examinerons quelques scnarios par la suite. Vous pouvez consulter la syntaxe de l'applet de commande Get-ChildItem en tapant :
PS> Get-Command -Name Get-ChildItem -Syntax

Ces paramtres peuvent tre combins et mis en correspondance pour obtenir une sortie trs personnalise.

53

Listage de tous les lments contenus (-Recurse)


Pour voir la fois les lments d'un dossier Windows et tous les lments contenus dans les sous-dossiers, utilisez le paramtre Recurse de Get-ChildItem. La liste affiche tous les lments du dossier Windows et de ses sous-dossiers. Par exemple :
PS> Get-ChildItem -Path C:\WINDOWS -Recurse Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch Mode ----a--... LastWriteTime ------------2004-08-04 8:00 AM Length Name ------ ---1852416 AcGenral.dll

Filtrage d'lments par nom (-Name)


Pour afficher uniquement les noms des lments, utilisez le paramtre Name de GetChildItem :
PS> Get-ChildItem -Path C:\WINDOWS -Name addins AppPatch assembly ...

Listage forc des lments masqus (-Force)


Les lments qui sont normalement invisibles dans l'Explorateur Windows ou Cmd.exe n'apparaissent pas dans la sortie d'une commande Get-ChildItem. Pour afficher des lments masqus, utilisez le paramtre Force de Get-ChildItem. Par exemple :
Get-ChildItem -Path C:\Windows -Force

Ce paramtre est nomm Force parce que vous pouvez remplacer de force le comportement normal de la commande Get-ChildItem. Force est un paramtre largement utilis qui force une action qu'une applet de commande n'excuterait pas normalement, l'exception des actions susceptibles de compromettre la scurit du systme.

Mise en correspondance de noms d'lments avec des caractres gnriques


La commande Get-ChildItem accepte des caractres gnriques dans le chemin d'accs des lments rpertorier.

54 Parce que la concordance par caractres gnriques est contrle par le moteur Windows PowerShell, toutes les applets de commande qui acceptent des caractres gnriques utilisent la mme notation et prsentent le mme comportement de mise en correspondance. La notation gnrique de Windows PowerShell inclut : l'astrisque (*), qui fait correspondre zro ou plusieurs occurrences de tout caractre ; le point d'interrogation (?), qui correspond exactement un caractre ; Les caractres crochet gauche ([) et crochet droit (]), qui encadrent un jeu de caractres mettre en correspondance.

Voici quelques exemples qui illustrent le fonctionnement de la spcification de caractres gnriques. Pour rechercher tous les fichiers du rpertoire Windows assortis de l'extension .log et dont le nom de base compte exactement cinq caractres, entrez la commande suivante :
PS> Get-ChildItem -Path C:\Windows\?????.log Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows Mode ---... -a---a--... -a---a--... LastWriteTime ------------2006-05-11 2006-05-11 2005-11-11 2005-12-15 6:31 PM 6:31 PM 4:55 AM 2:24 PM Length Name ------ ---204276 ocgen.log 22365 ocmsn.log 64 setup.log 17719 VxSDM.log

Pour rechercher tous les fichiers dont le nom commence par la lettre x dans le rpertoire Windows, tapez :
Get-ChildItem -Path C:\Windows\x*

Pour rechercher tous les fichiers dont le nom commence par x ou z, tapez :
Get-ChildItem -Path C:\Windows\[xz]*

Exclusion d'lments (-Exclude)


Vous pouvez exclure des lments spcifiques en utilisant le paramtre Exclude de GetChildItem. Cela vous permet d'excuter un filtrage complexe en une seule instruction. Par exemple, supposez que vous essayez de rechercher la DLL du service de temps Windows dans le dossier System32, et que tout ce dont vous vous souvenez du nom de la DLL est qu'il commence par W et contient 32 .

55 Une expression telle que w*32*.dll recherchera toutes les DLL qui satisfont ces conditions, mais peut aussi retourner toutes les DLL de compatibilit Windows 95 et Windows 16 bits qui incluent 95 ou 16 dans leur nom. Vous pouvez omettre les fichiers dont le nom contient ces nombres en utilisant le paramtre Exclude avec le modle *[9516]* :
PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude *[9516]*

Rpertoire : Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\System32

Mode ----a---a---a---a---a---a---a---a---a---

LastWriteTime ------------2004-08-04 2004-08-04 2004-08-04 2004-08-04 2004-08-04 2004-08-04 2004-08-04 2004-08-04 2004-08-04 8:00 AM 8:00 AM 8:00 AM 8:00 AM 8:00 AM 8:00 AM 8:00 AM 8:00 AM 8:00 AM

Length Name ------ ---174592 w32time.dll 22016 w32topl.dll 101888 win32spl.dll 172032 wldap32.dll 264192 wow32.dll 82944 ws2_32.dll 42496 wsnmp32.dll 22528 wsock32.dll 18432 wtsapi32.dll

Combinaison de paramtres de Get-ChildItem


Vous pouvez utiliser plusieurs paramtres de l'applet de commande Get-ChildItem dans la mme commande. Avant de combiner des paramtres, soyez sr de bien comprendre la concordance par caractres gnriques. Par exemple, la commande suivante ne retourne aucun rsultat :
PS> Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll

Il n'y a pas de rsultats, bien qu'il y ait deux DLL dont le nom commence par la lettre z dans le dossier Windows. Aucun rsultat n'a t retourn parce que nous avons spcifi le caractre gnrique dans le cadre du chemin d'accs. La commande tait rcursive, mais l'applet de commande Get-ChildItem a limit les lments ceux du dossier Windows dont le nom se termine par .dll .

56 Pour spcifier une recherche rcursive des fichiers dont le nom correspond un modle spcial, utilisez le paramtre -Include.
PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32\Setup

Mode ----a---

LastWriteTime ------------2004-08-04 8:00 AM

Length Name ------ ---8261 zoneoc.dll

Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32

Mode ----a---

LastWriteTime ------------2004-08-04 8:00 AM

Length Name ------ ---337920 zipfldr.dll

Manipulation directe d'lments


Un lment que vous voyez sur les lecteurs Windows PowerShell, tels que les fichiers et dossiers des lecteurs de systme de fichiers et les cls de Registre des lecteurs de Registre Windows PowerShell est appel Item (lment) dans Windows PowerShell. Le nom des applets de commande qui utilisent ces lments comprend le substantif Item. La sortie de la commande Get-Command -Noun Item montre qu'il existe neuf applets de commande Item Windows PowerShell.
PS> Get-Command -Noun Item CommandType ----------Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Name ---Clear-Item Copy-Item Get-Item Invoke-Item Move-Item New-Item Remove-Item Definition ---------Clear-Item [-Path] <String[]... Copy-Item [-Path] <String[]>... Get-Item [-Path] <String[]> ... Invoke-Item [-Path] <String[... Move-Item [-Path] <String[]>... New-Item [-Path] <String[]> ... Remove-Item [-Path] <String[...

57
Cmdlet Cmdlet Rename-Item Set-Item Rename-Item [-Path] <String>... Set-Item [-Path] <String[]> ...

Cration d'lments (New-Item)


Pour crer un lment dans le systme de fichiers, utilisez l'applet de commande NewItem. Incluez le paramtre Path avec le chemin d'accs l'lment et le paramtre ItemType avec la valeur file (fichier) ou directory (rpertoire). Par exemple, pour crer un rpertoire nomm New.Directory dans le rpertoire C:\Temp, tapez :
PS> New-Item -Path c:\temp\New.Directory -ItemType Directory Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\temp Mode ---d---LastWriteTime ------------2006-05-18 11:29 AM Length Name ------ ---New.Directory

Pour crer un fichier, remplacez la valeur du paramtre ItemType par file . Par exemple, pour crer un fichier nomm file1.txt dans le rpertoire New.Directory, tapez :
PS> New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory Mode ----a--LastWriteTime ------------2006-05-18 11:44 AM Length Name ------ ---0 file1

Vous pouvez utiliser la mme technique pour crer une cl de Registre. En fait, une cl de Registre est plus facile crer, car le seul type d'lment du Registre Windows est une cl. (Les entres de Registre sont des proprits d'lments.) Par exemple, pour crer une cl nomme _Test dans la sous-cl CurrentVersion, tapez :
PS> New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros oft\Windows\CurrentVersion SKC --0 VC Name -- ---0 _Test Property -------{}

58 Lorsque vous tapez un chemin d'accs de Registre, veillez inclure les deux-points (:) dans le nom des lecteurs Windows PowerShell, HKLM: et HKCU:. Sans les deux-points, Windows PowerShell ne reconnat pas le nom de lecteur dans le chemin d'accs.

Pourquoi les valeurs du Registre ne sont pas des lments


Lorsque vous utilisez l'applet de commande Get-ChildItem pour rechercher les lments d'une cl de Registre, vous ne verrez jamais les vritables entres du Registre ou leur valeur. Par exemple, la cl de Registre HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run contient habituellement plusieurs entres qui reprsentent les applications qui s'excutent lorsque le systme dmarre. Toutefois, lorsque vous utilisez Get-ChildItem pour rechercher des lments enfants de la cl, vous ne verrez que la sous-cl OptionalComponents de la cl :
PS> Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Micros oft\Windows\CurrentVersion\Run SKC VC Name Property --- -- ----------3 0 OptionalComponents {}

Il serait pratique de traiter les entres du Registre comme des lments, mais vous ne pouvez pas spcifier de chemin d'accs une entre du Registre d'une manire propre garantir son caractre unique. La notation de chemin d'accs ne fait pas la distinction entre la sous-cl de Registre nomme Run et l'entre de Registre (Default) de la souscl Run. En outre, parce que les noms d'entres de Registre peuvent contenir la barre oblique inverse (\), si les entres de Registre taient des lments, vous ne pourriez pas utiliser la notation de chemin d'accs pour distinguer une entre de Registre nomme Windows\CurrentVersion\Run de la sous-cl situe dans ce chemin d'accs.

Affectation d'un nouveau nom des lments existants (Rename-Item)


Pour renommer un fichier ou un dossier, utilisez l'applet de commande Rename-Item. La commande suivante renomme le fichier file1.txt en fileOne.txt.
PS> Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt

59 L'applet de commande Rename-Item peut renommer un fichier ou un dossier, mais ne peut pas dplacer un lment. La commande suivante choue, car elle essaie de dplacer le fichier du rpertoire New.Directory vers le rpertoire Temp.
PS> Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt Rename-Item : Impossible de renommer, car la cible spcifie n'est pas un chemin d'accs. la ligne : 1 Caractre : 12 + Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt

Dplacement d'lments (Move-Item)


Pour dplacer un fichier ou un dossier, utilisez l'applet de commande Move-Item. Par exemple, la commande suivante dplace le rpertoire New.Directory du rpertoire C:\temp vers la racine du lecteur C:. Pour vrifier que l'lment a t dplac, incluez le paramtre PassThru de l'applet de commande Move-Item. Sans Passthru, l'applet de commande Move-Item n'affiche pas de rsultats.
PS> Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\ Mode ---d---LastWriteTime ------------2006-05-18 12:14 PM Length Name ------ ---New.Directory

Copie d'lments (Copy-Item)


Si vous connaissez les oprations de copie dans d'autres environnements, vous pouvez trouver le comportement de l'applet de commande Copy-Item de Windows PowerShell inhabituel. Lorsque vous copiez un lment d'un emplacement vers un autre, Copy-Item ne copie pas son contenu par dfaut. Par exemple, si vous copiez le rpertoire New.Directory du rpertoire C: dans le rpertoire C:\temp, la commande russit, mais les fichiers de New.Directory ne sont pas copis.
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp

Si vous affichez le contenu de C:\temp\New.Directory, vous constaterez qu'il ne contient pas de fichiers :
PS> Get-ChildItem -Path C:\temp\New.Directory PS>

60 Pourquoi l'applet de commande Copy-Item ne copie-t-elle pas le contenu vers le nouvel emplacement ? L'applet de commande Copy-Item a t conue pour tre gnrique ; elle ne sert pas uniquement copier des fichiers et des dossiers. En outre, mme lorsque vous copiez des fichiers et des dossiers, vous pouvez souhaiter ne copier que le conteneur et non les lments qui s'y trouvent. Pour copier tout le contenu d'un dossier, incluez le paramtre Recurse de l'applet de commande Copy-Item dans la commande. Si vous avez dj copi le rpertoire sans son contenu, ajoutez le paramtre Force qui vous permet de remplacer le dossier vide.
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force Passthru Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\temp Mode ---d---LastWriteTime ------------2006-05-18 1:53 PM Length Name ------ ---New.Directory

Rpertoire : Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory Mode ----a--LastWriteTime ------------2006-05-18 11:44 AM Length Name ------ ---0 file1

Suppression d'lments (Remove-Item)


Pour supprimer des fichiers et des dossiers, utilisez l'applet de commande RemoveItem. Certaines applets de commande Windows PowerShell, telles que Remove-Item, qui peuvent apporter des modifications importantes et irrversibles, vous demandent une confirmation lorsque vous entrez leurs commandes. Par exemple, si vous essayez de supprimer le dossier New.Directory, vous serez invit confirmer la commande, car le dossier contient des fichiers :
PS> Remove-Item C:\New.Directory Confirmer L'lment situ l'emplacement C:\temp\New.Directory a des enfants et le paramtre -recurse n'a pas t spcifi. Si vous continuez, tous les enfants seront supprims avec l'lment. tes-vous sr de vouloir continuer ? [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide

(la valeur par dfaut est O (Oui) ) :

61 Parce que Oui est la rponse par dfaut, pour supprimer le dossier et ses fichiers, appuyez sur la touche Entre. Pour supprimer le dossier sans confirmer, utilisez le paramtre -Recurse.
PS> Remove-Item C:\temp\New.Directory -Recurse

Excution d'lments (Invoke-Item)


Windows PowerShell utilise l'applet de commande Invoke-Item pour excuter une action par dfaut pour un fichier ou dossier. Cette action par dfaut est dtermine par le gestionnaire d'application par dfaut du Registre ; l'effet est le mme que si vous doublecliquez sur l'lment dans l'Explorateur Windows. Par exemple, supposez que vous excutez la commande suivante :
PS> Invoke-Item C:\WINDOWS

Une fentre de l'Explorateur ouverte sur C:\Windows s'affiche, exactement comme si vous aviez double-cliqu sur le dossier C:\Windows. Si vous appelez le fichier Boot.ini sur un systme antrieur Windows Vista :
PS> Invoke-Item C:\boot.ini

Si le type de fichier .ini est associ au Bloc-notes, le fichier boot.ini s'ouvre dans le Blocnotes.

Utilisation d'objets
Nous avons vu de quelle manire Windows PowerShell utilise des objets pour transfrer des donnes entre applets de commande et montr diffrentes faons de consulter des informations dtailles sur les objets en utilisant les applets de commande Get-Member et Format pour afficher des proprits particulires d'objets. La puissance des objets rside dans le fait qu'ils vous fournissent l'accs de nombreuses donnes complexes dj corrles. Avec quelques techniques simples, vous pouvez manipuler les objets de sorte qu'ils ralisent encore plus de travail. Dans ce chapitre, nous allons nous intresser certains types spcifiques d'objets et aux manires de les manipuler.

62

Obtention d'objets WMI (GetWmiObject)


Obtention d'objets WMI (Get-WmiObject)
La technologie WMI (Windows Management Instrumentation) est essentielle pour l'administration du systme Windows, car elle expose une large gamme d'informations de faon uniforme. En raison du potentiel offert par WMI, l'applet de commande Windows PowerShell qui permet d'accder aux objets WMI, Get-WmiObject, est l'une des plus utiles pour effectuer un vritable travail. Nous allons voir comment utiliser Get-WmiObject pour accder des objets WMI, puis comment utiliser des objets WMI pour raliser des oprations spcifiques.

Listage des classes WMI


Le premier problme que la plupart des utilisateurs WMI rencontrent consiste dterminer ce qui peut tre fait avec WMI. Les classes WMI dcrivent les ressources qui peuvent tre gres. Il existe des centaines de classes WMI, certaines d'entre elles contenant des dizaines de proprits. Get-WmiObject traite ce problme en favorisant la dcouverte de WMI. Vous pouvez obtenir une liste des classes WMI disponibles sur l'ordinateur local en tapant :
PS> Get-WmiObject -List

__SecurityRelatedClass __PARAMETERS __NotifyStatus Win32_PrivilegesStatus Win32_TSRemoteControlSettingError ...

__NTLMUser9X __SystemSecurity __ExtendedStatus Win32_TSNetworkAdapterSettingError Win32_TSEnvironmentSettingError

Vous pouvez rcuprer les mmes informations partir d'un ordinateur distant en utilisant le paramtre ComputerName et en spcifiant un nom d'ordinateur ou une adresse IP :
PS> Get-WmiObject -List -ComputerName 192.168.1.29

__SystemClass __Provider __ProviderRegistration ...

__NAMESPACE __Win32Provider __ObjectProviderRegistration

63 La liste de classes retourne par les ordinateurs distants peut varier en raison du systme d'exploitation spcifique que l'ordinateur excute et des extensions WMI particulires ajoutes par les applications installes. Remarque : Lors de l'utilisation de Get-WmiObject pour vous connecter un ordinateur distant, ce dernier doit excuter WMI et, sous la configuration par dfaut, le compte que vous utilisez doit appartenir au groupe Administrateurs local de l'ordinateur distant. Il n'est pas ncessaire que Windows PowerShell soit install sur le systme distant. Cela vous permet d'administrer des systmes d'exploitation qui n'excutent pas Windows PowerShell, mais disposent de WMI. Vous avez mme la possibilit d'inclure ComputerName lors de la connexion au systme local. Vous pouvez utiliser le nom de l'ordinateur local, son adresse IP (ou l'adresse de bouclage 127.0.0.1) ou encore le . de style WMI comme nom d'ordinateur. Si vous excutez Windows PowerShell sur un ordinateur nomm Admin01 ayant l'adresse IP 192.168.1.90, les commandes suivantes retournent toutes la liste des classes WMI de cet ordinateur :
Get-WmiObject Get-WmiObject Get-WmiObject Get-WmiObject Get-WmiObject Get-WmiObject -List -List -List -List -List -List -ComputerName -ComputerName -ComputerName -ComputerName -ComputerName . Admin01 192.168.1.90 127.0.0.1 localhost

Get-WmiObject utilise l'espace de noms root/cimv2 par dfaut. Si vous souhaitez spcifier un autre espace de noms WMI, utilisez le paramtre Namespace et spcifiez le chemin d'accs de l'espace de noms correspondant :
PS> Get-WmiObject -List -ComputerName 192.168.1.29 -Namespace root

__SystemClass __Provider ...

__NAMESPACE __Win32Provider

Affichage d'informations sur une classe WMI


Si vous connaissez dj le nom d'une classe WMI, vous pouvez l'utiliser pour obtenir immdiatement des informations. Par exemple, Win32_OperatingSystem est l'une des classes WMI les plus souvent utilises pour rcuprer des informations sur un ordinateur.
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName .

64

SystemDirectory Organization BuildNumber RegisteredUser SerialNumber Version

: : : : : :

C:\WINDOWS\system32 Global Network Solutions 2600 Oliver W. Jones 12345-678-9012345-67890 5.1.2600

Bien que nous affichions tous les paramtres, la commande peut tre exprime de manire plus succincte. Le paramtre ComputerName n'est pas ncessaire lors de la connexion au systme local. Nous l'indiquons pour montrer le cas le plus gnral et vous rappeler le paramtre. Namespace (espace de noms) prend par dfaut la valeur root/cimv2 et peut galement tre omis. Enfin, la plupart des applets de commande vous permettent d'omettre le nom des paramtres courants. Avec Get-WmiObject, si aucun nom n'est spcifi pour le premier paramtre, Windows PowerShell le traite comme le paramtre Class. Cela signifie que la dernire commande aurait pu tre mise en tapant :
Get-WmiObject Win32_OperatingSystem

Les proprits de la classe Win32_OperatingSystem sont plus nombreuses que celles affiches ici. Vous pouvez utiliser Get-Member pour consulter toutes les proprits. Les proprits d'une classe WMI sont automatiquement disponibles comme celles d'autres proprits d'objets :
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Get-Member -MemberType Property

TypeName: System.Management.ManagementObject#root\cimv2\Win32_OperatingSyste m Name ---__CLASS ... BootDevice BuildNumber ... MemberType Definition ---------- ---------Property System.String __CLASS {... Property Property System.String BootDevic... System.String BuildNumb...

Affichage des proprits autres que celles par dfaut avec les applets de commande Format
Si vous souhaitez obtenir les informations contenues dans la classe Win32_OperatingSystem qui ne sont pas visibles par dfaut, vous pouvez les afficher

65 en utilisant les applets de commande Format. Par exemple, si vous souhaitez afficher les donnes relatives la mmoire disponible, tapez :
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-Table -Property TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory ,FreeSpaceInPagingFiles TotalVirtualMemorySize TotalVisibleMem FreePhysicalMem FreeVirtualMemo FreeSpaceInPagi ory ry ngFiles --------------- --------------- --------------- --------------- --------------2097024 785904 305808 2056724 1558232

Remarque : Les caractres gnriques fonctionnent avec les noms de proprits dans Format-Table, de sorte que le dernier lment du pipeline peut tre rduit Format-Table -Property TotalV*,Free* Les donnes sur la mmoire peuvent tre plus lisibles si vous les prsentez sous forme de liste en tapant :
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory ,FreeSpaceInPagingFiles

TotalVirtualMemorySize TotalVisibleMemorySize FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles

: : : : :

2097024 785904 301876 2056724 1556644

Cration d'objets .NET et COM (NewObject)


Certains composants logiciels des interfaces .NET Framework et COM vous permettent d'effectuer de nombreuses tches d'administration du systme. Windows PowerShell prend en charge l'utilisation de ces composants, de sorte que vous n'tes pas limit aux tches pouvant tre effectues au moyen des applets de commande. De nombreuses applets de commande de la version initiale de Windows PowerShell ne fonctionnent pas

66 sur des ordinateurs distants. Nous montrerons comment contourner cette limitation lors de la gestion des journaux des vnements en utilisant la classe .NET System.Diagnostics.EventLog directement partir de Windows PowerShell.

Utilisation de New-Object pour l'accs aux journaux d'vnements


La bibliothque de classes .NET Framework comprend une classe nomme System.Diagnostics.EventLog qui peut tre utilise pour grer les journaux d'vnements. Vous pouvez crer une nouvelle instance d'une classe .NET en utilisant l'applet de commande New-Object avec le paramtre TypeName (nom de type). Par exemple, la commande suivante cre une rfrence de journal des vnements :
PS> New-Object -TypeName System.Diagnostics.EventLog Max(K) Retain OverflowAction ------ ------ -------------Entries Name ------- ----

Bien que la commande ait cr une instance de la classe EventLog, cette instance n'inclut aucune donne. La raison en est que nous n'avons pas spcifi de journal des vnements particulier. Comment obtenir un vritable journal des vnements ?

Utilisation de constructeurs avec New-Object


Pour faire rfrence un journal des vnements particulier, vous devez en spcifier le nom. New-Object a un paramtre ArgumentList. Les arguments que vous passez comme valeurs ce paramtre sont utiliss par une mthode de dmarrage spciale de l'objet. La mthode est appele constructeur , car elle sert construire l'objet. Par exemple, pour obtenir une rfrence au journal Application, vous spcifiez la chane Application en tant qu'argument :
PS> New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application Max(K) Retain OverflowAction ------ ------ -------------16,384 7 OverwriteOlder Entries Name ------- ---2,160 Application

Remarque : Dans la mesure o la plupart des classes .NET principales sont contenues dans l'espace de noms System, Windows PowerShell essaie automatiquement de rechercher les classes vous spcifiez dans l'espace de noms System s'il ne peut pas trouver de correspondance pour le nom de type spcifi. Cela signifie que vous pouvez spcifier Diagnostics.EventLog au lieu de System.Diagnostics.EventLog.

67

Stockage d'objets dans des variables


Vous pouvez stocker une rfrence un objet de faon l'utiliser pendant une session Windows PowerShell. Bien que Windows PowerShell vous permette de raliser un travail considrable avec les pipelines en rduisant le besoin en variables, stocker des rfrences aux objets dans des variables peut parfois faciliter la manipulation de ces objets. Windows PowerShell vous permet de crer des variables qui sont pour l'essentiel des objets nomms. La sortie de toute commande Windows PowerShell valide peut tre stocke dans une variable. Les noms de variables commencent toujours par $. Si vous souhaitez stocker la rfrence au journal Application dans une variable nomme $AppLog, tapez le nom de la variable, suivi du signe gal, puis tapez la commande utilise pour crer l'objet du journal Application :
PS> $AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application

Si vous tapez ensuite $AppLog, vous constatez que cette variable contient le journal Application :
PS> $AppLog Max(K) Retain OverflowAction ------ ------ -------------16,384 7 OverwriteOlder Entries Name ------- ---2,160 Application

Accs un journal des vnements distant avec New-Object


Les commandes utilises dans la section prcdente ciblent l'ordinateur local ; l'applet de commande Get-EventLog peut le faire. Pour accder au journal Application d'un ordinateur distant, vous devez fournir la fois le nom du journal et un nom d'ordinateur (ou une adresse IP) en tant qu'arguments.
PS> $RemoteAppLog = New-Object -TypeName System.Diagnostics.EventLog Application,192.168.1.81 PS> $RemoteAppLog Max(K) Retain OverflowAction ------ ------ -------------512 7 OverwriteOlder Entries Name ------- ---262 Application

Maintenant que nous disposons d'une rfrence un journal des vnements stocke dans la variable $RemoteAppLog, quelles tches pouvons-nous effectuer dessus ?

68

Effacement d'un journal des vnements avec des mthodes d'objets


Les objets sont souvent assortis de mthodes qui peuvent tre appeles pour effectuer des tches. Vous pouvez utiliser Get-Member pour afficher les mthodes associes un objet. La commande suivante et la sortie slectionne affichent quelques mthodes de la classe EventLog :
PS> $RemoteAppLog | Get-Member -MemberType Method

TypeName: System.Diagnostics.EventLog Name ---... Clear Close ... GetType ... ModifyOverflowPolicy RegisterDisplayName ... ToString WriteEntry WriteEvent MemberType Definition ---------- ---------Method Method Method Method Method Method Method Method System.Void Clear() System.Void Close() System.Type GetType() System.Void ModifyOverflowPolicy(Overfl... System.Void RegisterDisplayName(String ... System.String ToString() System.Void WriteEntry(String message),... System.Void WriteEvent(EventInstance in...

La mthode Clear() peut tre utilise pour effacer le journal des vnements. Lorsque vous appelez une mthode, mme si celle-ci ne requiert pas d'arguments, vous devez toujours faire suivre son nom de parenthses. Cela permet Windows PowerShell de faire la distinction entre la mthode et une ventuelle proprit du mme nom. Tapez la commande suivante pour appeler la mthode Clear :
PS> $RemoteAppLog.Clear()

Tapez la commande ci-dessous pour afficher le journal. Vous verrez que le contenu du journal des vnements a t effac et qu'il prsente maintenant 0 entre au lieu de 262 :
PS> $RemoteAppLog Max(K) Retain OverflowAction ------ ------ -------------512 7 OverwriteOlder Entries Name ------- ---0 Application

69

Cration d'objets COM avec New-Object


Vous pouvez utiliser New-Object pour utiliser des composants COM (Component Object Model). Ces composants vont des diverses bibliothques fournies avec WSH (Windows Script Host) aux applications ActiveX comme Internet Explorer installes sur la plupart des systmes. New-Object utilise des wrappers WRC (Runtime Callable Wrapper) .NET Framework pour crer des objets COM. Les limitations qui lui sont applicables sont donc les mmes que celles de .NET lors de l'appel d'objets COM. Pour crer un objet COM, vous devez spcifier le paramtre ComObject avec l'identificateur programmatique (ProgID) de la classe COM utiliser. Une discussion complte des limitations de l'utilisation d'objets COM et l'identification des ProgID disponibles sur un systme dpassent le cadre du prsent guide, mais la plupart des objets connus d'environnements tels que WSH peuvent tre utiliss dans Windows PowerShell. Vous pouvez crer les objets WSH en spcifiant ces ProgID : WScript.Shell, WScript.Network, Scripting.Dictionary et Scripting.FileSystemObject. Les commandes suivantes crent ces objets :
New-Object New-Object New-Object New-Object -ComObject -ComObject -ComObject -ComObject WScript.Shell WScript.Network Scripting.Dictionary Scripting.FileSystemObject

Bien que la plupart des fonctionnalits de ces classes soient rendues disponibles par d'autres moyens dans Windows PowerShell, certaines tches, telles que la cration de raccourcis, restent plus simples en utilisant des classes WSH.

Cration d'un raccourci sur le Bureau avec WScript.Shell


La cration d'un raccourci peut tre effectue rapidement avec un objet COM. Supposez que vous souhaitez crer sur votre Bureau un raccourci vers le dossier de base de Windows PowerShell. Vous devez d'abord crer une rfrence WScript.Shell, que nous stockerons dans une variable nomme $WshShell :
$WshShell = New-Object -ComObject WScript.Shell

Get-Member fonctionne avec les objets COM, de sorte que vous pouvez explorer les membres de l'objet en tapant :
PS> $WshShell | Get-Member

TypeName: System.__ComObject#{41904400-be18-11d3-a28b-00104bd35090} Name MemberType Definition

70
---AppActivate CreateShortcut ... ---------Method Method ---------bool AppActivate (Variant, Va... IDispatch CreateShortcut (str...

Remarque : Get-Member a un paramtre InputObject optionnel que vous pouvez utiliser au lieu d'un oprateur de pipeline pour fournir des informations en entre GetMember. L'utilisation de la commande Get-Member -InputObject $WshShell donne la mme sortie que celle prsente ci-dessus. Si vous utilisez InputObject, son argument est trait comme un lment unique. Cela signifie que si une variable contient plusieurs objets, Get-Member les traite comme un tableau d'objets. Par exemple :
PS> $a = 1,2,"three" PS> Get-Member -InputObject $a

TypeName: System.Object[]

Name ---Count

MemberType ----------

Definition ----------

AliasProperty Count = Length

...

La mthode CreateShortcut de WScript.Shell accepte un seul argument : le chemin d'accs au fichier de raccourci crer. Nous pourrions taper le chemin d'accs complet au Bureau, mais il existe un moyen plus simple. Le Bureau est en principe reprsent par un dossier nomm Desktop et situ sous le dossier de base de l'utilisateur actuel. Windows PowerShell fournit une variable $Home qui contient le chemin d'accs ce dossier. Nous pouvons spcifier le chemin d'accs au dossier de base en utilisant cette variable, puis ajouter le nom du dossier Desktop et le nom du raccourci crer en tapant :
$lnk = $WshShell.CreateShortcut("$Home\Desktop\PSHome.lnk")

Remarque : Lorsque vous faites figurer entre guillemets doubles quelque chose qui ressemble un nom de variable, Windows PowerShell essaie de substituer une valeur correspondante. Si vous utilisez des guillemets simples, Windows

71 PowerShell n'essaie pas de substituer la valeur de la variable. Par exemple, essayez de taper les commandes suivantes :
PS> "$Home\Desktop\PSHome.lnk" C:\Documents and Settings\aka\Desktop\PSHome.lnk PS> '$Home\Desktop\PSHome.lnk' $Home\Desktop\PSHome.lnk

Nous disposons prsent d'une variable nomme $lnk qui contient une nouvelle rfrence de raccourci. Si vous souhaitez en consulter les membres, vous pouvez la diriger vers Get-Member. La sortie suivante affiche les membres que nous devons utiliser pour terminer de crer notre raccourci :
PS> $lnk | Get-Member

TypeName: System.__ComObject#{f935dc23-1cf0-11d0-adb9-00c04fd58a0b}

Name ---... Save ... TargetPath ...

MemberType ----------

Definition ----------

Method

void Save ()

Property

string TargetPath () {get} {set}

Nous devons spcifier TargetPath, qui reprsente le dossier d'application pour Windows PowerShell, puis enregistrer le raccourci $lnk en appelant la mthode Save. Le chemin d'accs au dossier d'application Windows PowerShell est stock dans la variable $PSHome. Nous pouvons donc raliser l'opration en tapant :
$lnk.TargetPath = $PSHome $lnk.Save()

Utilisation d'Internet Explorer partir de Windows PowerShell


De nombreuses applications (y compris la famille Microsoft Office d'applications et Internet Explorer) peuvent tre automatises en utilisant COM. Internet Explorer illustre

72 certaines des techniques et questions classiques qu'implique l'utilisation d'applications COM. Vous crez une instance d'Internet Explorer en spcifiant son ProgID, InternetExplorer.Application :
$ie = New-Object -ComObject InternetExplorer.Application

Cette commande dmarre Internet Explorer, mais ne le rend pas visible. Si vous tapez Get-Process, vous pouvez voir qu'un processus nomm iexplore est en cours d'excution. En fait, si vous quittez Windows PowerShell, l'excution du processus se poursuit. Vous devez redmarrer l'ordinateur ou utiliser un outil tel que le Gestionnaire des tches pour mettre fin au processus iexplore. Remarque : Les objets COM qui dmarrent en tant que processus distincts, communment appels fichiers excutables ActiveX , peuvent ou non afficher une fentre d'interface utilisateur lorsqu'ils dmarrent. S'ils crent une fentre, mais ne la rendent pas visibles, comme c'est le cas d'Internet Explorer, c'est gnralement le Bureau Windows qui est activ et vous devez rendre la fentre visible pour interagir avec l'application en question. En tapant $ie | Get-Member, vous pouvez consulter les proprits et mthodes d'Internet Explorer. Pour voir la fentre Internet Explorer, dfinissez la proprit Visible sur $true en tapant :
$ie.Visible = $true

Vous pouvez alors accder une adresse Web spcifique en utilisant la mthode Navigate :
$ie.Navigate("http://www.microsoft.com/technet/scriptcenter/default.mspx")

En utilisant d'autres membres du modle objet d'Internet Explorer, il est possible de rcuprer le contenu de texte de la page Web. La commande suivante affichera le texte HTML du corps de la page Web active :
$ie.Document.Body.InnerText

Pour fermer Internet Explorer partir de PowerShell, appelez sa mthode Quit() :


$ie.Quit()

Cela forcera sa fermeture. La variable $ie ne contient plus de rfrence valide, bien qu'elle semble toujours tre un objet COM. Si vous essayez de l'utiliser, vous obtenez une erreur d'automation :

73
PS> $ie | Get-Member Get-Member : Exception lors de la rcupration de la reprsentation sous forme de chane de la proprit Application : L'objet invoqu s'est dconnect de ses clients. (Exception de HRESULT : 0x80010108 (RPC_E_DISCONNECTED)) la ligne : 1 Caractre : 16 + $ie | Get-Member <<<<

Vous pouvez soit supprimer la rfrence restante avec une commande telle que $ie = $null, soit compltement supprimer la variable en tapant :
Remove-Variable ie

Remarque : Il n'existe pas de norme en ce qui concerne la fermeture ou la poursuite de l'excution d'un excutable ActiveX lorsque vous supprimez la rfrence correspondante. En fonction des circonstances, telles que la visibilit de l'application, l'excution d'un document modifi dedans, voire la poursuite ou non de l'excution de Windows PowerShell, l'application peut ou non tre ferme. C'est la raison pour laquelle vous devez tester le comportement d'arrt de chaque excutable ActiveX que vous souhaitez utiliser dans Windows PowerShell.

Obtention d'avertissements sur les objets COM associs un wrapper .NET


Dans certains cas, un objet COM peut tre associ un wrapper RCW (wrapper pouvant tre appel par le runtime) .NET, qui sera utilis par New-Object. Le comportement de ce wrapper pouvant diffrer de celui d'un objet COM classique, New-Object a un paramtre Strict qui vous avertit de l'accs au wrapper RCW. Si vous spcifiez le paramtre Strict, puis crez un objet COM qui utilise un wrapper RCW, un message d'avertissement s'affiche :
PS> $xl = New-Object -ComObject Excel.Application -Strict New-Object : L'objet crit dans le pipeline est une instance du type Microsoft.Office.Interop.Excel.ApplicationClass de l'assembly PIA. Si ce type expose des membres diffrents des membres Idispatch, les scripts crits pour utiliser cet objet ne peuvent pas fonctionner si l'assembly PIA n'est pas install. la ligne : 1 Caractre : 17 + $xl = New-Object <<<< -ComObject Excel.Application -Strict

74 Bien que l'objet soit effectivement cr, vous tes averti qu'il ne s'agit pas d'un objet COM standard.

Utilisation de classes et de mthodes statiques


Toutes les classes .NET Framework ne peuvent pas tre cres en utilisant New-Object. Par exemple, si vous essayez de crer un objet System.Environment ou System.Math avec New-Object, les messages d'erreur suivants s'affichent :
PS> New-Object System.Environment New-Object : Constructeur introuvable. Impossible de trouver un constructeur appropri pour le type System.Environment. la ligne : 1 Caractre : 11 + New-Object <<<< System.Environment PS> New-Object System.Math New-Object : Constructeur introuvable. Impossible de trouver un constructeur appropri pour le type System.Math. la ligne : 1 Caractre : 11 + New-Object <<<< System.Math

Ces erreurs se produisent parce qu'il n'existe aucun moyen de crer un objet partir de ces classes. Ces classes sont des bibliothques de rfrence de mthodes et proprits dont l'tat ne change pas. Vous n'avez pas besoin de les crer, vous les utilisez simplement. De telles classes et mthodes sont dites statiques , parce qu'elles ne sont pas cres, dtruites ou modifies. Pour clairer ces propos, nous fournirons des exemples qui utilisent des classes statiques.

Obtention de donnes d'environnement avec System.Environment


La premire tape pour utiliser un objet dans Windows PowerShell consiste gnralement utiliser Get-Member afin de connatre les membres qu'il contient. Avec les classes statiques, le processus est un peu diffrent, car la vritable classe n'est pas un objet.

75

Rfrence la classe statique System.Environment


Vous pouvez faire rfrence une classe statique en encadrant son nom de crochets. Par exemple, vous pouvez faire rfrence System.Environment en tapant ce nom entre crochets. Cette opration entrane l'affichage d'informations d'ordre gnral :
PS> [System.Environment] IsPublic IsSerial Name -------- -------- ---True False Environment BaseType -------System.Object

Remarque : Comme nous l'avons mentionn prcdemment, Windows PowerShell ajoute automatiquement System. aux noms de types lorsque vous utilisez NewObject. La mme chose se produit lors de l'utilisation d'un nom de type entre crochets, de sorte que vous pouvez utiliser [Environment] pour spcifier [System.Environment]. La classe System.Environment contient des informations gnrales sur l'environnement de travail du processus actuel, qui est powershell.exe lorsque vous travaillez dans Windows PowerShell. Si vous essayez de consulter les dtails de cette classe en tapant [System.Environment] | Get-Member, le type d'objet signal est System.RuntimeType, et non System.Environment :
PS> [System.Environment] | Get-Member TypeName: System.RuntimeType

Pour afficher les membres statiques avec Get-Member, spcifiez le paramtre Static :
PS> [System.Environment] | Get-Member -Static

TypeName: System.Environment Name ---Equals Exit ... CommandLine CurrentDirectory ExitCode HasShutdownStarted MachineName NewLine MemberType ---------Method Method Property Property Property Property Property Property Definition ---------static System.Boolean Equals(Object ob... static System.Void Exit(Int32 exitCode) static static static static static static System.String CommandLine {get;} System.String CurrentDirectory ... System.Int32 ExitCode {get;set;} System.Boolean HasShutdownStart... System.String MachineName {get;} System.String NewLine {get;}

76
OSVersion ProcessorCount StackTrace SystemDirectory TickCount UserDomainName UserInteractive UserName Version WorkingSet TickCount Property Property Property Property Property Property Property Property Property Property static System.OperatingSystem OSVersio... static System.Int32 ProcessorCount {get;} static System.String StackTrace {get;} static System.String SystemDirectory {... static System.Int32 TickCount {get;} static System.String UserDomainName {g... static System.Boolean UserInteractive ... static System.String UserName {get;} static System.Version Version {get;} static System.Int64 WorkingSet {get;} ExitCode

Nous pouvons maintenant slectionner les proprits de System.Environment afficher.

Affichage des proprits statiques de System.Environment


Les proprits de System.Environment sont galement statiques et doivent tre spcifies d'une manire diffrente des proprits normales. Nous utilisons :: pour indiquer Windows PowerShell que nous souhaitons utiliser une mthode ou une proprit statique. Pour voir la commande qui a t utilise pour lancer Windows PowerShell, nous vrifions la proprit CommandLine en tapant :
PS> [System.Environment]::Commandline "C:\Program Files\Windows PowerShell\v1.0\powershell.exe"

Pour vrifier la version du systme d'exploitation, affichez la proprit OSVersion en tapant :


PS> [System.Environment]::OSVersion Platform ServicePack -------- ----------Win32NT Service Pack 2 Version ------5.1.2600.131072 VersionString ------------Microsoft Window...

Nous pouvons vrifier si l'ordinateur est en cours d'arrt en affichant la proprit HasShutdownStarted :
PS> [System.Environment]::HasShutdownStarted False

Mathmatiques avec System.Math


La classe statique System.Math est utile pour effectuer des oprations mathmatiques. Les membres importants de System.Math sont principalement des mthodes, que nous pouvons afficher l'aide de Get-Member.

77 Remarque : System.Math a plusieurs mthodes du mme nom, mais elles se distinguent par le type de leurs paramtres. Tapez la commande ci-dessous pour obtenir la liste des mthodes de la classe System.Math.
PS> [System.Math] | Get-Member -Static -MemberType Methods

TypeName: System.Math Name ---Abs Acos Asin Atan Atan2 BigMul Ceiling Cos Cosh DivRem Equals Exp Floor IEEERemainder Log Log10 Max Min Pow ReferenceEquals Round Sign Sin Sinh Sqrt Tan Tanh Truncate MemberType ---------Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Method Definition ---------static System.Single Abs(Single value), static Sy... static System.Double Acos(Double d) static System.Double Asin(Double d) static System.Double Atan(Double d) static System.Double Atan2(Double y, Double x) static System.Int64 BigMul(Int32 a, Int32 b) static System.Double Ceiling(Double a), static Sy... static System.Double Cos(Double d) static System.Double Cosh(Double value) static System.Int32 DivRem(Int32 a, Int32 b, Int3... static System.Boolean Equals(Object objA, Object ... static System.Double Exp(Double d) static System.Double Floor(Double d), static Syst... static System.Double IEEERemainder(Double x, Doub... static System.Double Log(Double d), static System... static System.Double Log10(Double d) static System.SByte Max(SByte val1, SByte val2), ... static System.SByte Min(SByte val1, SByte val2), ... static System.Double Pow(Double x, Double y) static System.Boolean ReferenceEquals(Object objA... static System.Double Round(Double a), static Syst... static System.Int32 Sign(SByte value), static Sys... static System.Double Sin(Double a) static System.Double Sinh(Double value) static System.Double Sqrt(Double d) static System.Double Tan(Double a) static System.Double Tanh(Double value) static System.Decimal Truncate(Decimal d), static...

Cela affiche plusieurs mthodes mathmatiques. Voici une liste des commandes qui montrent comment fonctionnent les mthodes courantes :
PS> [System.Math]::Sqrt(9) 3 PS> [System.Math]::Pow(2,3) 8

78
PS> 3 PS> -4 PS> 4 PS> -3 PS> 7 PS> 2 PS> 9 PS> -9 [System.Math]::Floor(3.3) [System.Math]::Floor(-3.3) [System.Math]::Ceiling(3.3) [System.Math]::Ceiling(-3.3) [System.Math]::Max(2,7) [System.Math]::Min(2,7) [System.Math]::Truncate(9.3) [System.Math]::Truncate(-9.3)

Suppression d'objets du pipeline (WhereObject)


Dans Windows PowerShell, vous gnrez et passez un pipeline souvent plus d'objets que vous ne le souhaitez. Vous pouvez spcifier les proprits d'objets particuliers afficher en utilisant les applets de commande Format, mais cela ne contribue pas supprimer des objets entiers de l'affichage. Vous pouvez filtrer les objets avant la fin d'un pipeline de faon n'excuter des actions que sur un sous-ensemble des objets gnrs initialement. Windows PowerShell inclut une applet de commande Where-Object qui vous permet de tester chaque objet du pipeline et de ne le passer la suite du pipeline que s'il satisfait une condition de test particulire. Les objets qui ne russissent pas le test sont supprims du pipeline. Vous fournissez la condition de test comme valeur du paramtre Where-ObjectFilterScript.

Excution de tests simples avec Where-Object


La valeur de FilterScript est un bloc de script (une ou plusieurs commandes Windows PowerShell entre accolades {}) qui prend la valeur true (vrai) ou false (faux). Ces blocs de script peuvent tre trs simples, mais leur cration implique de connatre un autre concept Windows PowerShell : les oprateurs de comparaison. Un oprateur de comparaison compare les lments qui se situent sa gauche et sa droite. Les oprateurs de comparaison commencent par le caractre - , suivi d'un nom. Les oprateurs de comparaison de base fonctionnent sur presque tout type d'objet. Les

79 oprateurs de comparaison plus volus peuvent ne fonctionner que sur du texte ou des tableaux. Remarque : Par dfaut, lorsqu'ils agissent sur du texte, les oprateurs de comparaison Windows PowerShell ne sont pas sensibles la casse. Pour des raisons d'analyse, les oprateurs de comparaison n'utilisent pas de symboles tels que <, >, et =, mais sont constitus de lettres. Les oprateurs de comparaison de base sont rpertoris dans le tableau suivant : Oprateur de comparaison -eq -ne -lt -le -gt -ge -like Signification Est gal Est diffrent de Est infrieur Est infrieur ou gal Est suprieur Est suprieur ou gal Est similaire (comparaison gnrique pour du texte) N'est pas similaire (comparaison gnrique pour du texte) Contient Ne contient pas Exemple (retourne true) 1 -eq 1 1 -ne 2 1 -lt 2 1 -le 2 2 -gt 1 2 -ge 1 "file.doc" -like "f*.do?"

-notlike

"file.doc" -notlike "p*.doc"

-contains -notcontains

1,2,3 -contains 1 1,2,3 -notcontains 4

Les blocs de script Where-Object utilisent la variable spciale $_ pour faire rfrence l'objet actif du pipeline. Voici un exemple de la faon dont cela fonctionne. Si vous disposez d'une liste de nombres et souhaitez ne retourner que ceux qui sont infrieurs 3, vous pouvez utiliser Where-Object pour filtrer les nombres en tapant :
PS> 1,2,3,4 | Where-Object -FilterScript {$_ -lt 3} 1 2

80

Filtrage selon les proprits d'un objet


tant donn que $_ fait rfrence l'objet actif du pipeline, nous pouvons accder ses proprits pour nos tests. titre d'exemple, nous pouvons nous intresser la classe Win32_SystemDriver de WMI. Un systme particulier peut contenir des centaines de pilotes systme, mais vous pouvez n'tre intress que par un jeu particulier de pilotes systme, tels ceux qui sont en cours d'excution. Si vous utilisez Get-Member pour afficher les membres de Win32_SystemDriver (Get-WmiObject -Class Win32_SystemDriver | Get-Member MemberType Property), vous verrez que la proprit pertinente est State (tat) et que sa valeur est Running lorsque le pilote est en cours d'excution. Vous pouvez filtrer les pilotes systme afin de slectionner uniquement ceux qui sont excuts en tapant :
Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"}

La liste produite reste longue. Vous pouvez filtrer de manire slectionner uniquement les pilotes configurs pour dmarrer automatiquement en testant galement la valeur StartMode :
PS> Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"} | Where-Object -FilterScript {$_.StartMode -eq "Auto"} DisplayName Name State Status Started DisplayName Name State Status Started : : : : : : : : : : RAS Asynchronous Media Driver AsyncMac Running OK True Audio Stub Driver audstub Running OK True

Cela nous donne beaucoup d'informations dont nous n'avons plus besoin puisque nous savons que les pilotes sont en cours d'excution. En fait, les seules informations dont nous pouvons avoir besoin ce stade sont le nom et le nom d'affichage. La commande suivante inclut uniquement les deux proprits correspondantes (Name et DisplayName), ce qui produit une sortie beaucoup plus simple :
PS> Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"} | Where-Object -FilterScript {$_.StartMode -eq "Manual"} | FormatTable -Property Name,DisplayName Name ---DisplayName -----------

81
AsyncMac Fdc Flpydisk Gpc IpNat mouhid MRxDAV mssmbios RAS Asynchronous Media Driver Floppy Disk Controller Driver Floppy Disk Driver Generic Packet Classifier IP Network Address Translator Mouse HID Driver WebDav Client Redirector Microsoft System Management BIOS Driver

La commande prcdente contient deux lments Where-Object, mais ils peuvent tre exprims en un seul en utilisant l'oprateur logique -and, comme suit :
Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript { ($_.State eq "Running") -and ($_.StartMode -eq "Manual") } | Format-Table -Property Name,DisplayName

Les oprateurs logiques standard sont rpertoris dans le tableau suivant : Oprateur logique -and Signification and logique ; true (vrai) si les deux cts sont true or logique ; true si l'un des cts est true not logique ; inverse true et false (faux) not logique ; inverse true et false (faux) Exemple (retourne true) (1 -eq 1) -and (2 -eq 2)

-or

(1 -eq 1) -or (1 -eq 2)

-not

-not (1 -eq 2)

!(1 -eq 2)

Rptition d'une tche pour plusieurs objets (ForEach-Object)


L'applet de commande ForEach-Object utilise des blocs de script et le descripteur $_ de l'objet de pipeline actif pour vous permettre d'excuter une commande sur chaque objet du pipeline. Elle peut tre utilise pour effectuer des tches compliques. Cela peut tre particulirement pratique pour manipuler des donnes afin de les rendre plus exploitables. Par exemple, la classe Win32_LogicalDisk de WMI peut tre utilise pour retourner des informations sur l'espace libre de chaque disque local. Les donnes retournes sont exprimes en octets, ce qui n'en facilite pas la lecture :

82
PS> Get-WmiObject -Class Win32_LogicalDisk

DeviceID DriveType ProviderName FreeSpace Size VolumeName

: : : : : :

C: 3 50665070592 203912880128 Local Disk

Nous pouvons convertir la valeur de FreeSpace (espace libre) en mgaoctets en divisant chaque valeur par 1024 deux fois ; aprs la premire division, les donnes sont exprimes en kilo-octets, et aprs la deuxime, en mgaoctets. Vous pouvez effectuer cette opration au moyen d'un bloc de script ForEach-Object en tapant :
Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {($_.FreeSpace)/1024.0/1024.0} 48318.01171875

Malheureusement, la sortie propose maintenant des donnes sans libell associ. Parce que les proprits WMI telles que celle-ci sont en lecture seule, vous ne pouvez pas convertir FreeSpace directement. Si vous tapez ceci :
Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {$_.FreeSpace = ($_.FreeSpace)/1024.0/1024.0}

Un message d'erreur s'affiche :


FreeSpace est une proprit en lecture seule. la ligne : 1 Caractre : 70 + Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {$_.F <<<< r eeSpace = ($_.FreeSpace)/1024.0/1024.0}

Vous pourriez rorganiser les donnes l'aide de quelque technique volue, mais il existe une approche plus simple qui consiste crer un objet en utilisant Select-Object.

Slection de parties d'objets (SelectObject)


Vous pouvez utiliser l'applet de commande Select-Object pour crer des objets Windows PowerShell personnaliss contenant des proprits slectionnes des objets que vous utilisez pour les crer. Tapez la commande suivante pour crer un objet

83 incluant uniquement les proprits Name et FreeSpace de la classe WMI Win32_LogicalDisk :


PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace Name ---C: FreeSpace --------50664845312

Vous ne pouvez pas voir le type de donnes aprs avoir mis cette commande, mais si vous dirigez le rsultat vers Get-Member aprs Select-Object, vous constatez que vous disposez d'un nouveau type d'objet, PSCustomObject :
PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace| Get-Member

TypeName: System.Management.Automation.PSCustomObject Name ---Equals GetHashCode GetType ToString FreeSpace Name MemberType ---------Method Method Method Method NoteProperty NoteProperty Definition ---------System.Boolean Equals(Object obj) System.Int32 GetHashCode() System.Type GetType() System.String ToString() FreeSpace=... System.String Name=C:

Les utilisations de Select-Object sont nombreuses. L'une d'elles est la rplication de donnes que vous pouvez ensuite modifier. Nous pouvons maintenant traiter le problme rencontr au cours de la section prcdente. Nous pouvons mettre jour la valeur de FreeSpace dans nos objets rcemment crs et la sortie inclura le libell descriptif :
Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace | ForEach-Object -Process {$_.FreeSpace = ($_.FreeSpace)/1024.0/1024.0; $_} Name FreeSpace -----------C: 48317.7265625

Tri d'objets
Nous pouvons organiser des donnes affiches pour en simplifier l'analyse en utilisant l'applet de commande Sort-Object. Celle-ci accepte le nom d'une ou de plusieurs proprits trier et retourne des donnes tries selon les valeurs de ces proprits.

84 Considrez le problme d'une liste d'instances de Win32_SystemDriver. Si nous souhaitons trier cette liste par tat (State), puis par nom (Name), nous pouvons le faire en tapant :
Get-WmiObject -Class Win32_SystemDriver | Sort-Object -Property State,Name | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap

Bien que l'affichage obtenu soit long, vous pouvez voir regroups les lments prsentant le mme tat :
Name ---ACPI AFD AmdK7 AsyncMac ... Abiosdsk ACPIEC aec ... State Started DisplayName ----------- ----------Running True Microsoft ACPI Driver Running True AFD Running True AMD K7 Processor Driver Running True RAS Asynchronous Media Driver Stopped Stopped Stopped False Abiosdsk False ACPIEC False Microsoft Kernel Acoustic Echo Canceller

Vous pouvez galement trier les objets dans l'ordre inverse en spcifiant le paramtre Descending. Cela inverse l'ordre de tri afin que les noms soient tris dans l'ordre alphabtique inverse et les nombres par ordre dcroissant de taille.
PS> Get-WmiObject -Class Win32_SystemDriver | Sort-Object -Property State,Name Descending | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap Name ---WS2IFSL wceusbsh ... wdmaud Wanarp ... State Started DisplayName ----------- ----------Stopped False Windows Socket 2.0 Non-IFS Service Provider Supp ort Environment Stopped False Windows CE USB Serial Host Driver... Running Running True Microsoft WINMM WDM Audio Compatibility Driver True Remote Access IP ARP Driver

Utilisation de variables pour stocker des objets


Windows PowerShell fonctionne avec des objets. Windows PowerShell vous permet de crer des variables (essentiellement des objets nomms) pour conserver la sortie en vue d'une utilisation ultrieure. Si vous tes habitu travailler avec des variables dans

85 d'autres environnements, souvenez-vous que les variables Windows PowerShell sont des objets et non du texte. Les variables sont toujours spcifies avec le caractre initial $ et leur nom peut inclure tout caractre alphanumrique ou le trait de soulignement.

Cration d'une variable


Vous pouvez crer une variable en tapant un nom de variable valide :
PS> $loc PS>

Cette commande ne retourne aucun rsultat, car $loc n'a pas de valeur. Vous pouvez crer une variable et lui affecter une valeur en une mme tape. Windows PowerShell cre la variable seulement si elle n'existe pas ; sinon, il affecte la valeur spcifie la variable existante. Pour stocker votre emplacement actuel dans la variable $loc, tapez :
$loc = Get-Location

Cette commande n'affiche aucune sortie, car celle-ci est envoye $loc. Dans Windows PowerShell, la sortie affiche est un effet secondaire du fait que les donnes qui ne sont pas diriges ailleurs sont toujours envoyes l'cran. Taper $loc affichera votre emplacement actuel :
PS> $loc Path ---C:\temp

Vous pouvez utiliser Get-Member pour afficher des informations sur le contenu de variables. Diriger $loc vers Get-Member vous indique qu'il s'agit d'un objet PathInfo, exactement comme la sortie de Get-Location :
PS> $loc | Get-Member -MemberType Property

TypeName: System.Management.Automation.PathInfo Name ---Drive Path Provider ProviderPath MemberType ---------Property Property Property Property Definition ---------System.Management.Automation.PSDriveInfo Drive {get;} System.String Path {get;} System.Management.Automation.ProviderInfo Provider {... System.String ProviderPath {get;}

86

Manipulation de variables
Windows PowerShell fournit plusieurs commandes pour la manipulation de variables. Vous pouvez en obtenir la liste complte prsente de manire lisible en tapant :
Get-Command -Noun Variable | Format-Table -Property Name,Definition -AutoSize Wrap

Outre les variables que vous crez dans votre session Windows PowerShell actuelle, il existe plusieurs variables dfinies par le systme. Vous pouvez utiliser l'applet de commande Remove-Variable pour effacer toutes les variables qui ne sont pas contrles par Windows PowerShell. Tapez la commande suivante pour effacer toutes les variables :
Remove-Variable -Name * -Force -ErrorAction SilentlyContinue

Cela entrane l'affichage du message de demande de confirmation ci-dessous.


Confirmer tes-vous sr de vouloir effectuer cette action ? Opration Remove-Variable en cours sur la cible Name: Error . [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide

(la valeur par dfaut est O ) : A

Si vous excutez ensuite l'applet de commande Get-Variable, vous verrez les variables Windows PowerShell restantes. Comme Windows PowerShell propose aussi un lecteur variable:, vous pouvez galement afficher toutes les variables Windows PowerShell en tapant :
Get-ChildItem variable:

Utilisation de variables Cmd.exe


Bien que Windows PowerShell ne soit pas Cmd.exe, il s'excute dans un environnement de ligne de commande et peut utiliser les mmes variables disponibles dans tout environnement dans Windows. Ces variables sont exposes via le lecteur nomm env:. Vous pouvez les consulter en tapant :
Get-ChildItem env:

Bien que les applets de commande variable standard ne soient pas conues pour fonctionner avec des variables env:, vous pouvez les utiliser en spcifiant le prfixe env:. Par exemple, pour voir le rpertoire racine du systme d'exploitation, vous pouvez utiliser

87 la variable %SystemRoot% de l'environnement de commande partir de Windows PowerShell en tapant :


PS> $env:SystemRoot C:\WINDOWS

Vous pouvez galement crer et modifier des variables d'environnement partir de Windows PowerShell. Les variables d'environnement accessibles partir de Windows PowerShell obissent aux rgles normales des variables d'environnement prsentes ailleurs dans Windows.

Utilisation de Windows PowerShell pour l'administration


L'objectif fondamental de Windows PowerShell est de fournir un contrle administratif meilleur et plus facile sur les systmes, que ce soit de manire interactive ou par le biais de scripts. Ce chapitre passe en revue les solutions proposes par Windows PowerShell de nombreux problmes spcifiques en matire d'administration des systmes Windows. Bien que nous n'ayons pas parl de scripts ou de fonctions dans le Guide lmentaire de Windows PowerShell, ces solutions pourront ultrieurement tre utilises partir de scripts ou en tant que fonctions. Nous montrerons des exemples qui incluent des fonctions dans le cadre de la solution un problme. Vous trouverez dans les descriptions des solutions une combinaison de solutions utilisant des applets de commande spcifiques, l'applet de commande Get-WmiObject gnrale et mme des outils externes appartenant aux infrastructures Windows et .NET. L'utilisation d'outils externes s'intgre dans la volont de conception pour le long terme de Windows PowerShell. Mme avec la croissance du systme, les utilisateurs se trouveront toujours confronts des situations dans lesquelles les ensembles d'outils proposs ne suffisent pas rpondre entirement leurs besoins. Plutt que d'entretenir la dpendance vis vis des seules implmentations d'applets de commande, Windows PowerShell essaie de favoriser l'intgration de solutions de chaque autre scnario possible.

Gestion des processus locaux


Il existe seulement deux applets de commande Process principales : Get-Process et Stop-Process. Parce qu'il est possible d'examiner et de filtrer les processus au moyen

88 soit de paramtres, soit des applets de commande Object, vous pouvez effectuer certaines tches complexes en utilisant uniquement ces deux applets de commande.

Listage des processus (Get-Process)


Vous pouvez obtenir une liste de tous les processus qui s'excutent sur le systme local en excutant Get-Process sans paramtres. Vous pouvez galement retourner un seul processus en spcifiant son identificateur (ID) l'aide du paramtre Id. L'exemple suivant retourne le processus Idle du systme :
PS> Get-Process -Id 0 Handles NPM(K) PM(K) ------- ---------0 0 0 WS(K) VM(M) ----- ----16 0 CPU(s) -----Id ProcessName -- ----------0 Idle

Bien qu'il soit normal pour des applets de commande de ne pas retourner de donnes dans certaines situations, lorsque vous spcifiez un processus par son ID, Get-Process gnre une erreur s'il ne trouve aucune correspondance, car l'intention habituelle est de rcuprer un processus en cours d'excution connu. S'il n'existe aucun processus ayant cet ID, il est probable que l'identificateur ne soit pas correct ou que le processus en question ait dj t arrt :
PS> Get-Process -Id 99 Get-Process : Aucun processus avec l'ID de processus 99 n'a t trouv. la ligne : 1 Caractre : 12 + Get-Process <<<< -Id 99

Le paramtre Name peut tre utilis pour spcifier un sous-ensemble de processus sur la base du nom du processus. Dans la mesure o plusieurs processus peuvent avoir le mme nom, la sortie peut inclure plusieurs processus. S'il n'existe aucun processus de ce nom, Get-Process retourne une erreur, comme il le fait lorsque vous spcifiez un identificateur de processus. Par exemple, si vous spcifiez le nom de processus explore au lieu d'explorer :
PS> Get-Process -Name explore Get-Process : Aucun processus avec le nom de processus explore n'a t trouv. la ligne : 1 Caractre : 12 + Get-Process <<<< -Name explore

Le paramtre Name prenant en charge l'utilisation de caractres gnriques, vous pouvez taper les premiers caractres d'un nom, suivis d'un astrisque pour obtenir une liste :

89
PS> Get-Process -Name ex* Handles NPM(K) PM(K) ------- ---------234 7 5572 555 15 34500

WS(K) VM(M) ----- ----12484 134 12384 134

CPU(s) -----2.98 105.25

Id -1684 728

ProcessName ----------EXCEL explorer

Remarque : Parce que la classe .NET System.Diagnostics.Process sert de base aux processus Windows PowerShell, elle suit certaines des conventions utilises par System.Diagnostics.Process. L'une de ces conventions est que le nom de processus d'un fichier excutable n'inclut jamais l'extension .exe . Get-Process accepte galement plusieurs valeurs pour le paramtre Name. Comme avec la spcification d'un nom seul, un message d'erreur s'affiche si aucune correspondance de nom n'est trouve, mme si vous obtenez aussi la sortie normale pour les processus mis en correspondance :
PS> Get-Process -Name exp*,power*,NotAProcess Get-Process : Aucun processus avec le nom de processus NotAProcess n'a t trouv. la ligne : 1 Caractre : 12 + Get-Process <<<< -Name exp*,power*,svchost,NotAProcess Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- -------------- ----------- ----------540 15 35172 48148 141 88.44 408 explorer 605 9 30668 29800 155 7.11 3052 powershell

Arrt de processus (Stop-Process)


Windows PowerShell vous permet d'obtenir la liste des processus, mais qu'en est-il de l'arrt d'un processus ? L'applet de commande Stop-Process accepte un nom ou un identificateur pour spcifier un processus que vous souhaitez arrter. Votre capacit arrter des processus dpend de vos autorisations. Certains processus ne peuvent pas tre arrts. Par exemple, si vous essayez d'arrter le processus Idle, un message d'erreur s'affiche :
PS> Stop-Process -Name Idle Stop-Process : Le processus Idle (0) ne peut pas tre arrt en raison de l'erreur suivante : Accs refus. la ligne : 1 Caractre : 13 + Stop-Process <<<< -Name Idle

90 Vous pouvez forcer une demande de confirmation avec le paramtre Confirm. Ce paramtre est particulirement utile si vous spcifiez un nom de processus avec un caractre gnrique, parce que vous pouvez par erreur mettre en correspondance certains processus que vous ne souhaitez pas arrter :
PS> Stop-Process -Name t*,e* -Confirm Confirmer tes-vous sr de vouloir effectuer cette action ? Opration Stop-Process en cours sur la cible explorer (408) . [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide

(la valeur par dfaut est O (Oui) ) : n Confirmer tes-vous sr de vouloir effectuer cette action ? Opration Stop-Process en cours sur la cible taskmgr (4072) . [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide

(la valeur par dfaut est O (Oui) ) : n

La manipulation de processus complexes est possible en utilisant certaines des applets de commande de filtrage d'objets. Parce qu'un objet Process a une proprit Responding qui a la valeur true (vrai) lorsqu'il ne rpond plus, vous pouvez arrter toutes les applications qui ne rpondent pas avec la commande suivante :
Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process

Vous pouvez utiliser la mme approche dans d'autres situations. Par exemple, supposez une application de barre d'tat systme secondaire qui s'excute automatiquement lorsque les utilisateurs dmarrent une autre application. Vous pouvez trouver que son fonctionnement dans des sessions de services Terminal Server n'est pas correct, mais vouloir le conserver dans des sessions excutes sur la console de l'ordinateur physique. Les sessions connectes au Bureau de l'ordinateur physique ont toujours l'ID de session 0, de sorte que vous pouvez arrter toutes les instances du processus prsentes dans d'autres sessions l'aide de Where-Object et du processus, SessionId :
Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-Process

Arrt de toutes les autres sessions Windows PowerShell


Il peut parfois tre utile de pouvoir arrter toutes les sessions Windows PowerShell en cours d'excution autres que la session actuelle. Si une session utilise trop de

91 ressources ou est inaccessible (elle peut s'excuter distance ou dans une autre session du Bureau), il est possible que vous ne soyez pas en mesure de l'arrter directement. Si vous essayez d'arrter toutes les sessions en cours d'excution, cela peut aboutir l'arrt de la session actuelle. Chaque session Windows PowerShell a un PID de variable d'environnement qui contient l'identificateur du processus Windows PowerShell. Vous pouvez vrifier $PID par rapport l'identificateur de chaque session et terminer uniquement les sessions Windows PowerShell dont l'identificateur est diffrent. La commande de pipeline suivante effectue cette opration et retourne la liste des sessions termines (en raison de l'utilisation du paramtre PassThru) :
PS> Get-Process -Name powershell | Where-Object -FilterScript {$_.Id -ne $PID} | Stop-Process PassThru Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- -------------- ----------- ----------334 9 23348 29136 143 1.03 388 powershell 304 9 23152 29040 143 1.03 632 powershell 302 9 20916 26804 143 1.03 1116 powershell 335 9 25656 31412 143 1.09 3452 powershell 303 9 23156 29044 143 1.05 3608 powershell 287 9 21044 26928 143 1.02 3672 powershell

Gestion de services locaux


Il existe huit applets de commande Service principales, conues pour une large gamme de tches lies aux services. Nous ne nous intresserons qu'au listage et la modification de l'tat d'excution des services, mais vous pouvez obtenir la liste des applets de commande Service en utilisant Get-Help *-Service et rechercher des informations sur chacune d'elles en tapant Get-Help <nom_applet_commande>, par exemple Get-Help New-Service.

Listage des services


Vous pouvez numrer les services locaux d'un ordinateur en utilisant Get-Service. Comme avec Get-Process, l'utilisation de la commande Get-Service sans paramtres retourne tous les services. Vous pouvez filtrer par nom, mme en utilisant un astrisque en tant que caractre gnrique :
PS> Get-Service -Name se* Status Name --------Running seclogon DisplayName ----------Secondary Logon

92
Running Stopped SENS ServiceLayer System Event Notification ServiceLayer

Parce qu'il n'est pas toujours vident de dterminer le vritable nom du service, vous devrez peut-tre rechercher les services par leur nom d'affichage. Vous pouvez le faire par nom spcifique, l'aide de caractres gnriques ou l'aide d'une liste de noms d'affichage :
PS> Get-Service -DisplayName se* Status Name DisplayName ------------------Running lanmanserver Server Running SamSs Security Accounts Manager Running seclogon Secondary Logon Stopped ServiceLayer ServiceLayer Running wscsvc Security Center PS> Get-Service -DisplayName ServiceLayer,Server Status Name DisplayName ------------------Running lanmanserver Server Stopped ServiceLayer ServiceLayer

Arrt, dmarrage, interruption et redmarrage de services


Les applets de commande Service ont toutes la mme forme gnrale. Les services peuvent tre spcifis par nom commun ou nom d'affichage et acceptent des listes et des caractres gnriques comme valeurs. Pour arrter le spouleur d'impression, utilisez :
Stop-Service -Name spooler

Pour dmarrer le spouleur d'impression aprs qu'il a t arrt, utilisez :


Start-Service -Name spooler

Pour interrompre (suspendre) le spouleur d'impression, utilisez :


Suspend-Service -Name spooler

L'applet de commande Restart-Service fonctionne de la mme manire que les autres applets de commande Service, mais nous proposerons pour celle-ci quelques exemples plus complexes. Dans son utilisation la plus simple, vous spcifiez le nom du service :
PS> Restart-Service -Name spooler AVERTISSEMENT : Attente de la fin du dmarrage du service Print Spooler (Spooler) ...

93
AVERTISSEMENT : Attente de la fin du dmarrage du service Print Spooler (Spooler) ... PS>

Notez l'affichage rpt du message d'avertissement relatif au dmarrage du spouleur d'impression. Lorsque vous excutez une opration de service qui prend du temps, Windows PowerShell vous informe qu'il essaie toujours d'effectuer la tche. Si vous souhaitez redmarrer plusieurs services, vous pouvez obtenir une liste de services, les filtrer, puis excuter le redmarrage :
PS> Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service AVERTISSEMENT : Attente de la fin de l'arrt du service Computer Browser (Browser) ... AVERTISSEMENT : Attente de la fin de l'arrt du service Computer Browser (Browser) ... Restart-Service : Impossible d'arrter le service Logical Disk Manager (dmserver) car d'autres services en dpendent. Il peut tre arrt uniquement si l'indicateur Force est dfini. la ligne : 1 Caractre : 57 + Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<< AVERTISSEMENT : Attente de la fin du dmarrage du service Print Spooler (Spooler) ... AVERTISSEMENT : Attente de la fin du dmarrage du service Print Spooler (Spooler) ...

Collecte d'informations sur des ordinateurs


Get-WmiObject est l'applet de commande la plus importante pour les tches gnrales de gestion du systme. Tous les paramtres de sous-systme critiques sont exposs via WMI. En outre, WMI traite les donnes comme des objets de collections d'un ou de plusieurs lments. Parce que Windows PowerShell fonctionne galement avec les objets et a un pipeline qui vous permet de traiter un seul ou plusieurs objets de la mme faon, l'accs WMI gnrique vous permet d'effectuer des tches volues moyennant trs peu de travail.

94 Les exemples suivants montrent comment collecter des informations spcifiques en utilisant Get-WmiObject sur un ordinateur arbitraire. Nous affectons comme valeur au paramtre ComputerName le point (.), ce qui reprsente l'ordinateur local. Vous pouvez spcifier le nom ou l'adresse IP de tout ordinateur accessible via WMI. Pour rcuprer des informations sur l'ordinateur local, vous pouvez omettre -ComputerName . .

Listage des paramtres des bureaux


Nous commencerons par une commande qui collecte des informations sur les Bureaux de l'ordinateur local.
Get-WmiObject -Class Win32_Desktop -ComputerName .

Les informations retournes concernent tous les Bureaux, qu'ils soient ou non utiliss. Remarque : Les informations retournes par certaines classes WMI peuvent tre trs dtailles et incluent souvent des mtadonnes sur la classe WMI. Comme ces proprits de mtadonnes ont des noms qui commencent par un trait de soulignement double, vous pouvez les filtrer l'aide de Select-Object. Spcifiez uniquement les proprits qui commencent par des caractres alphabtiques en utilisant [a-z]* comme valeur de Property. Par exemple :
Get-WmiObject -Class Win32_Desktop -ComputerName . | Select-Object -Property [az]*

Pour liminer les mtadonnes par filtrage, utilisez un oprateur de pipeline (|) afin d'envoyer les rsultats de la commande Get-WmiObject Select-Object -Property [az]*.

Listage des informations sur le BIOS


La classe WMI Win32_BIOS retourne des informations relativement compactes et compltes propos du BIOS systme de l'ordinateur local :
Get-WmiObject -Class Win32_BIOS -ComputerName .

Listage des informations sur le processeur


Vous pouvez rcuprer des informations gnrales sur le processeur l'aide de la classe WMI Win32_Processor, mme s'il est probable que vous souhaiterez les filtrer :
Get-WmiObject -Class Win32_Processor -ComputerName . | Select-Object -Property [az]*

95 Pour obtenir une chane de description gnrique de la famille du processeur, vous pouvez simplement retourner la proprit Win32_ComputerSystemSystemType :
PS> Get-WmiObject -Class Win32_ComputerSystem -ComputerName . | Select-Object Property SystemType SystemType ---------X86-based PC

Listage du fabricant et du modle de l'ordinateur


Des informations sur le modle de l'ordinateur sont galement disponibles via Win32_ComputerSystem. La sortie standard affiche n'aura besoin d'aucun filtrage pour fournir des donnes OEM :
PS> Get-WmiObject -Class Win32_ComputerSystem Domain : WORKGROUP Manufacturer : Compaq Presario 06 Model : DA243A-ABA 6415cl NA910 Name : MyPC PrimaryOwnerName : Jane Doe TotalPhysicalMemory : 804765696

L'exactitude de votre sortie pour des commandes telles que celle-ci, qui retournent des informations provenant directement du matriel, ne pourra tre suprieure celle des donnes dont vous disposez. Certaines informations ne sont pas correctement configures par les fabricants de matriel et peuvent donc ne pas tre disponibles.

Listage des correctifs logiciels installs


Vous pouvez obtenir la liste de tous les correctifs logiciels installs l'aide de Win32_QuickFixEngineering :
Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName .

Cette classe retourne une liste de correctifs logiciels semblable celle-ci :


Description FixComments HotFixID Install Date InstalledBy InstalledOn Name ServicePackInEffect Status : : : : : : : : : Update for Windows XP (KB910437) Update KB910437 Administrator 12/16/2005 SP3

96 Pour une sortie plus succincte, vous pouvez exclure certaines proprits. Bien que vous puissiez utiliser le paramtre Property de Get-WmiObject pour choisir uniquement le HotFixID, procder de cette manire retournera en fait plus d'informations, car toutes les mtadonnes sont affiches par dfaut :
PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property HotFixId HotFixID : KB910437 __GENUS : 2 __CLASS : Win32_QuickFixEngineering __SUPERCLASS : __DYNASTY : __RELPATH : __PROPERTY_COUNT : 1 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH :

Des donnes supplmentaires sont retournes, parce que le paramtre Property de GetWmiObject limite les proprits retournes par les instances de classes WMI et non l'objet retourn Windows PowerShell. Pour rduire la sortie, utilisez Select-Object :
PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property Hot FixId | Select-Object -Property HotFixId HotFixId -------KB910437

Listage des informations de version d'un systme d'exploitation


Les proprits de la classe Win32_OperatingSystem incluent les informations de version et de Service Pack. Vous pouvez explicitement slectionner uniquement ces proprits pour obtenir de Win32_OperatingSystem un rsum des informations de version :
Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object Property BuildNumber,BuildType,OSType,ServicePackMajorVersion,ServicePackMinorVersion

Vous pouvez galement utiliser des caractres gnriques avec le paramtre Property de Select-Object. Parce que l'important est ici d'utiliser toutes les proprits qui commencent par Build ou ServicePack, nous pouvons utiliser la forme raccourcie suivante :
PS> Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -

97
Property Build*,OSType,ServicePack* BuildNumber BuildType OSType ServicePackMajorVersion ServicePackMinorVersion : : : : : 2600 Uniprocessor Free 18 2 0

Listage des utilisateurs et du propritaire locaux


Des informations gnrales sur les utilisateurs (nombre d'utilisateurs sous licence, nombre actuel d'utilisateurs et nom du propritaire) peuvent tre recherches avec une slection de proprits de Win32_OperatingSystem. Vous pouvez slectionner explicitement les proprits afficher comme suit :
Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object Property NumberOfLicensedUsers,NumberOfUsers,RegisteredUser

En voici une version plus succincte qui utilise des caractres gnriques :
Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object Property *user*

Obtention de l'espace disque disponible


Pour consulter l'espace disque et l'espace libre pour les lecteurs locaux, vous pouvez utiliser la classe WMI Win32_LogicalDisk. Vous avez uniquement besoin de voir les instances ayant un DriveType de 3 (la valeur que WMI utilise pour les disques durs fixes).
Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . DeviceID DriveType ProviderName FreeSpace Size VolumeName DeviceID DriveType ProviderName FreeSpace Size VolumeName : : : : : : : : : : : : C: 3 65541357568 203912880128 Local Disk Q: 3 44298250240 122934034432 New Volume

PS> Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . |

98
Measure-Object -Property FreeSpace,Size -Sum Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum | Select-Object -Property Property,Sum

Obtention d'informations sur les ouvertures de session


Vous pouvez obtenir des informations gnrales sur les ouvertures de session associes des utilisateurs par le biais de la classe WMI Win32_LogonSession :
Get-WmiObject -Class Win32_LogonSession -ComputerName .

Obtention de l'utilisateur connect un ordinateur


Vous pouvez afficher l'utilisateur connect un systme informatique particulier l'aide de Win32_ComputerSystem. Cette commande retourne uniquement l'utilisateur connect au Bureau du systme :
Get-WmiObject -Class Win32_ComputerSystem -Property UserName -ComputerName .

Obtention de l'heure locale d'un ordinateur


Vous pouvez rcuprer l'heure locale actuelle sur un ordinateur spcifique l'aide de la classe WMI Win32_LocalTime. Parce que cette classe affiche par dfaut toutes les mtadonnes, vous pouvez les filtrer l'aide de Select-Object :
PS> Get-WmiObject -Class Win32_LocalTime -ComputerName . | Select-Object -Property [a-z]*

Day DayOfWeek Hour Milliseconds Minute Month Quarter Second WeekInMonth Year

: : : : : : : : : :

15 4 12 11 6 2 52 3 2006

99

Affichage de l'tat des services


Pour consulter l'tat de tous les services d'un ordinateur spcifique, vous pouvez utiliser l'applet de commande Get-Service localement comme mentionn prcdemment. Pour les systmes distants, vous pouvez utiliser la classe WMI Win32_Service. Si vous utilisez galement Select-Object pour filtrer les rsultats sur Status, Name et DisplayName, le format de sortie sera presque identique celui de Get-Service :
Get-WmiObject -Class Win32_Service -ComputerName . | Select-Object -Property Status,Name,DisplayName

Pour permettre l'affichage complet des noms trs longs de services occasionnels, vous pouvez utiliser Format-Table avec les paramtres AutoSize et Wrap afin d'optimiser la largeur des colonnes et faire en sorte qu'au lieu d'tre tronqus, les noms longs soient renvoys la ligne :
Get-WmiObject -Class Win32_Service -ComputerName . | Format-Table -Property Status,Name,DisplayName -AutoSize -Wrap

Utilisation d'installations logicielles


Les applications correctement conues de faon utiliser Windows Installer sont accessibles via la classe WMI Win32_Product, mais toutes les applications en usage aujourd'hui n'utilisent pas Windows Installer. Parce que Windows Installer fournit le plus large ventail de techniques standard pour utiliser des applications installables, nous nous concentrerons essentiellement sur ces applications. Les applications qui utilisent d'autres routines d'installation ne seront gnralement pas gres par Windows Installer. Les techniques spcifiques pour utiliser ces applications dpendront du programme d'installation et les dcisions prises par le dveloppeur de telle ou telle application. Remarque : Les applications installes par copie des fichiers d'application sur l'ordinateur ne peuvent gnralement pas tre gres l'aide des techniques prsentes ici. Vous pouvez grer ces applications en tant que fichiers et dossiers en utilisant les techniques prsentes dans la section Utilisation des fichiers et dossiers .

Listage des applications Windows Installer


Les applications installes avec Windows Installer sur un systme local ou distant peuvent tre facilement numres par une requte WMI simple :
PS> Get-WmiObject -Class Win32_Product -ComputerName .

100
IdentifyingNumber Name Vendor Version Caption : : : : : {7131646D-CD3C-40F4-97B9-CD9E4E6262EF} Microsoft .NET Framework 2.0 Microsoft Corporation 2.0.50727 Microsoft .NET Framework 2.0

Vous pouvez prfrer utiliser Select-Object, parce que d'autres informations non affiches par dfaut sont utiles. Si vous essayez de rechercher l'emplacement de cache du package de Microsoft .NET Framework 2.0, vous pouvez utiliser la commande suivante :
PS> Get-WmiObject -Class Win32_Product -ComputerName . | Where-Object FilterScript {$_.Name -eq "Microsoft .NET Framework 2.0"} | Select-Object Property [a-z]* Name : Microsoft .NET Framework 2.0 Version : 2.0.50727 InstallState : 5 Caption : Microsoft .NET Framework 2.0 Description : Microsoft .NET Framework 2.0 IdentifyingNumber : {7131646D-CD3C-40F4-97B9-CD9E4E6262EF} InstallDate : 20060506 InstallDate2 : 20060506000000.000000-000 InstallLocation : PackageCache : C:\WINDOWS\Installer\619ab2.msi SKUNumber : Vendor : Microsoft Corporation

Vous pouvez aussi utiliser le paramtre Filter de Get-WmiObject pour slectionner uniquement Microsoft .NET Framework 2.0. Le filtre utilis dans cette commande est un filtre WMI, qui n'utilise donc pas la syntaxe de filtrage de Windows PowerShell, mais WQL (WMI Query Language) :
Get-WmiObject -Class Win32_Product -ComputerName . -Filter "Name='Microsoft .NET Framework 2.0'"| Select-Object -Property [a-z]*

Remarque : Les requtes WQL utilisent frquemment des caractres, tels que des espaces ou des signes gal (=), qui ont une signification particulire dans Windows PowerShell. C'est pourquoi il est prudent de toujours faire figurer la valeur du paramtre Filter entre guillemets. Vous pouvez galement utiliser le caractre d'chappement de Windows PowerShell, un backtick (`), mme s'il ne favorise pas la lisibilit. La commande suivante est quivalente la commande prcdente et retourne les mmes rsultats, mais utilise le backtick pour ignorer les caractres spciaux au lieu des guillemets pour encadrer toute la chane de filtrage :

101
Get-WmiObject -Class Win32_Product -ComputerName . -Filter Name`=`'Microsoft` .NET` Framework` 2.0`' | Select-Object -Property [a-z]*

Une autre faon de gnrer une liste rduite est de choisir explicitement le format d'affichage. La sortie suivante prsente certaines des proprits les plus utiles pour identifier des packages installs particuliers :
Get-WmiObject -Class Win32_Product -ComputerName . | Format-List Name,InstallDate,InstallLocation,PackageCache,Vendor,Version,IdentifyingNumber ... Name : HighMAT Extension to Microsoft Windows XP CD Writing Wizard InstallDate : 20051022 InstallLocation : C:\Program Files\HighMAT CD Writing Wizard\ PackageCache : C:\WINDOWS\Installer\113b54.msi Vendor : Microsoft Corporation Version : 1.1.1905.1 IdentifyingNumber : {FCE65C4E-B0E8-4FBD-AD16-EDCBE6CD591F} ...

Enfin, si vous souhaitez rechercher uniquement les noms des applications installes, une simple instruction Format-Wide rduira la sortie pour vous :
Get-WmiObject -Class Win32_Product -ComputerName . | Format-Wide -Column 1

Si nous disposons prsent de plusieurs moyens pour identifier les applications qui ont utilis Windows Installer pour l'installation, nous n'avons pas considr les autres applications. Parce que la plupart des applications standard inscrivent leur programme de dsinstallation dans le Registre Windows, nous pouvons y rechercher ces programmes pour les utiliser localement.

Listage de toutes les applications pouvant tre dsinstalles


Bien qu'il n'existe aucun moyen absolument sr de trouver toutes les applications d'un systme, il est possible de rechercher tous les programmes qui figurent dans les listes affiches dans la bote de dialogue Ajouter ou supprimer des programmes. Cette bote de dialogue trouve ces applications partir de la liste de la cl de Registre HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall et nous pouvons galement examiner cette cl nous-mmes pour trouver des applications. Pour simplifier la consultation de la cl Uninstall, nous pouvons mapper un lecteur Windows PowerShell cet emplacement du Registre :
PS> New-PSDrive -Name Uninstall -PSProvider Registry -Root HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

102
Name ---Uninstall Provider -------Registry Root ---HKEY_LOCAL_MACHINE\SOFTWARE\Micr... CurrentLocation ---------------

Remarque : Le lecteur HKLM: est mapp la racine de HKEY_LOCAL_MACHINE, aussi avons-nous utilis ce lecteur dans le chemin d'accs la cl Uninstall. Au lieu de HKLM:, nous aurions pu spcifier le chemin d'accs au Registre en utilisant HKLM ou HKEY_LOCAL_MACHINE. L'avantage de l'utilisation d'un lecteur de Registre existant est que nous pouvons utiliser la saisie automatique par tabulation pour remplir les noms de cls et ainsi viter de les taper. Nous disposons prsent d'un lecteur nomm Uninstall qui peut tre utilis pour rechercher rapidement et facilement des installations d'applications. Nous pouvons dterminer le nombre d'applications installes en comptant le nombre de cls de Registre du lecteur Uninstall: de Windows PowerShell :
PS> (Get-ChildItem -Path Uninstall:).Length 459

Nous pouvons effectuer dans cette liste d'applications une recherche plus pousse en utilisant diverses techniques, commencer par Get-ChildItem. Pour obtenir une liste d'applications dans la variable $UninstallableApplications, nous pouvons procder comme suit :
$UninstallableApplications = Get-ChildItem -Path Uninstall:

Remarque : Nous utilisons ici un nom de variable long pour des raisons de clart. En pratique, il n'y a aucune raison d'utiliser des noms longs. Bien que vous puissiez utiliser la saisie automatique par tabulation pour les noms de variables, vous pouvez galement utiliser des noms de 1 2 caractres pour gagner en vitesse. L'utilit de noms descriptifs plus longs se justifie lorsque vous dveloppez du code en vue de sa rutilisation. Nous pouvons rechercher les noms d'affichage des applications de la cl Uninstall en utilisant la commande suivante :
PS> Get-ChildItem -Path Uninstall: | ForEach-Object -Process { $_.GetValue("DisplayName") }

103 L'unicit de ces valeurs n'est pas garantie. Dans l'exemple suivant, deux lments installs se prsentent comme faisant partie de Windows Media Encoder 9 Series :
PS> Get-ChildItem -Path Uninstall: | Where-Object -FilterScript { $_.GetValue("DisplayName") -eq "Windows Media Encoder 9 Series"}

Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros oft\Windows\CurrentVersion\Uninstall SKC --0 0 VC -3 24 Name ---Windows Media Encoder 9 {E38C00D0-A68B-4318-A8A6-F7... Property -------{DisplayName, DisplayIcon, UninstallS... {AuthorizedCDFPrefix, Comments, Conta...

Installation d'applications
Vous pouvez utiliser la classe Win32_Product pour installer des packages Windows Installer, distance ou localement. Les installations distantes doivent spcifier le chemin d'accs au package .msi installer comme un chemin d'accs rseau conforme la convention d'affectation des noms (UNC, Universal Naming Convention) classique, car le sous-systme WMI ne comprend pas les chemins d'accs Windows PowerShell. Par exemple, pour installer le package MSI NewPackage.msi situ sur le partage rseau \\AppServ\dsp de l'ordinateur distant PC01, vous devez entrer ce qui suit l'invite Windows PowerShell :
(Get-WMIObject -ComputerName PC01 -List | Where-Object -FilterScript {$_.Name -eq "Win32_Product"}).InvokeMethod("Install","\\AppSrv\dsp\NewPackage.msi")

Les applications qui n'utilisent pas la technologie Windows Installer peuvent disposer de mthodes propres l'application en vue d'un dploiement automatis. Pour dterminer l'existence d'une telle mthode, vous devrez probablement vrifier la documentation de l'application en question ou consulter le systme d'assistance de son diteur. Dans certains cas, mme si l'diteur de l'application n'a pas conu l'application spcifiquement en vue d'une installation automatise, le fabricant du programme d'installation peut disposer de techniques d'automatisation.

Suppression d'applications
La suppression d'un package Windows Installer l'aide de Windows PowerShell fonctionne peu prs de la mme manire que l'installation d'un package via InvokeMethod. Voici un exemple qui choisit le package dsinstaller selon sa proprit Name ; dans certains cas, il peut tre plus facile de filtrer avec IdentifyingNumber :
(Get-WmiObject -Class Win32_Product -Filter "Name='ILMerge'" -ComputerName .

104
).InvokeMethod("Uninstall",$null)

La suppression des autres applications n'est pas aussi simple, mme en local. Nous pouvons trouver les chanes de dsinstallation par la ligne de commande de ces applications en extrayant la proprit UninstallString. Cette mthode fonctionne pour les applications Windows Installer et les programmes plus anciens qui apparaissent sous la cl Uninstall :
Get-ChildItem -Path Uninstall: | ForEach-Object -Process { $_.GetValue("UninstallString") }

Vous pouvez si vous le souhaitez filtrer la sortie par nom d'affichage :


Get-ChildItem -Path Uninstall: | Where-Object -FilterScript { $_.GetValue("DisplayName") -like "Win*"} | ForEach-Object -Process { $_.GetValue("UninstallString") }

Toutefois, il est possible que ces chanes ncessitent quelques modifications pour tre utilisables partir de l'invite de Windows PowerShell.

Mise niveau d'applications Windows Installer


Effectuer la mise niveau d'une application implique deux renseignements. Vous devez connatre le nom de l'application installe mettre niveau et le chemin d'accs au package de mise niveau de l'application. Avec ces informations, une mise niveau de Windows PowerShell peut tre effectue grce une ligne de commande simple :
(Get-WmiObject -Class Win32_Product -ComputerName . -Filter "Name='OldAppName'").InvokeMethod("Upgrade","\\AppSrv\dsp\OldAppUpgrade.msi")

Changement d'tat de l'ordinateur : verrouillage, fermeture de session, arrt en cours et redmarrage


Vous pouvez rinitialiser un ordinateur de diffrentes manires partir de Windows PowerShell, mais dans la version initiale, vous devez utiliser un outil de ligne de commande standard ou WMI. Mme si vous utilisez Windows PowerShell uniquement pour appeler un outil particulier, la procdure de modification de l'tat d'alimentation d'un ordinateur illustre certaines informations importantes relatives l'utilisation d'outils externes.

105

Verrouillage d'un ordinateur


La seule faon de verrouiller directement un ordinateur avec les outils standard disponibles consiste appeler la fonction LockWorkstation () directement dans user32.dll :
rundll32.exe user32.dll,LockWorkStation

Cette commande verrouillera immdiatement la station de travail. Sur les systmes d'exploitation tels que Windows XP, o l'option Changement rapide d'utilisateur est active, l'ordinateur revient l'cran d'ouverture de session de l'utilisateur au lieu de dmarrer l'cran de veille de l'utilisateur actuel. Sur un serveur Terminal Server o vous pouvez dconnecter des sessions spcifiques, vous pouvez aussi utiliser l'outil de ligne de commande tsshutdn.exe.

Fermeture de la session active


Vous pouvez fermer une session du systme local de diffrentes manires. Le moyen le plus simple consiste utiliser l'outil de ligne de commande du Bureau distance/des services Terminal Server, logoff.exe (tapez logoff /? une invite de commandes PowerShell ou autre pour connatre les informations relatives son utilisation). Pour fermer la session active, tapez logoff sans arguments. Une autre possibilit est d'utiliser l'outil shutdown.exe avec son option de fermeture de session :
shutdown.exe -l

Une troisime possibilit consiste utiliser WMI. La classe Win32_OperatingSystem a une mthode Win32Shutdown ; l'appel de cette mthode avec l'argument 0 lance la fermeture de session :
(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).InvokeMethod("Win32Shutdown",0)

Arrt ou redmarrage d'un ordinateur


L'arrt et le redmarrage d'un ordinateur sont gnralement deux tches de mme type. Les outils qui arrtent un ordinateur permettent aussi de le redmarrer, et inversement. Il existe deux options simples pour redmarrer un ordinateur partir de Windows PowerShell. Vous pouvez utiliser soit tsshutdn.exe, soit shutdown.exe avec les arguments appropris. Vous pouvez obtenir des informations dtailles relatives leur utilisation en tapant tsshutdn.exe /? ou shutdown.exe /?.

106 Il est galement possible d'excuter les oprations d'arrt et de redmarrage l'aide de Win32_OperatingSystem directement partir de Windows PowerShell. Les dtails d'une telle implmentation dpassent toutefois le cadre de ce Guide lmentaire de Windows PowerShell.

Utilisation d'imprimantes
Les tches de gestion des imprimantes peuvent tre effectues dans Windows PowerShell avec WMI et l'objet COM WScript.Network de WSH. Nous utiliserons une combinaison de ces deux outils pour illustrer des tches spcifiques.

Listage des connexions d'imprimantes


La faon la plus simple de rpertorier les imprimantes installes sur un ordinateur consiste utiliser la classe WMI Win32_Printer :
Get-WmiObject -Class Win32_Printer -ComputerName .

Vous pouvez galement les rpertorier l'aide de l'objet COM WScript.Network gnralement utilis dans les scripts WSH :
(New-Object -ComObject WScript.Network).EnumPrinterConnections()

Cette commande retourne une simple collection de chanes de noms de ports et de noms d'imprimantes sans libells caractristiques, ce qui n'en facilite pas autant l'examen.

Ajout d'une imprimante rseau


Vous pouvez trs facilement ajouter une nouvelle imprimante rseau avec WScript.Network :
(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("\\Printserver01\Xerox5")

Dfinition d'une imprimante par dfaut


Pour dfinir l'imprimante par dfaut l'aide de WMI, vous devez filtrer la collection Win32_Printer jusqu' obtention de l'imprimante voulue, puis appeler la mthode SetDefaultPrinter :
(Get-WmiObject -ComputerName . -Class Win32_Printer -Filter "Name='HP LaserJet 5Si'").InvokeMethod("SetDefaultPrinter",$null)

107 L'objet WScript.Network est un peu plus simple utiliser ; il a galement une mthode SetDefaultPrinter et il vous suffit de spcifier le nom de l'imprimante en tant qu'argument :
(New-Object -ComObject WScript.Network).SetDefaultPrinter('HP LaserJet 5Si')

Suppression d'une connexion d'imprimante


Vous pouvez supprimer une connexion d'imprimante avec la mthode RemovePrinterConnection de WScript.Network :
(New-Object -ComObject WScript.Network).RemovePrinterConnection("\\Printserver01\Xerox5")

Tches de gestion de rseau


La plupart des tches d'administration du protocole rseau de bas niveau impliquent TCP/IP, car TCP/IP est le protocole rseau le plus communment utilis. Nous verrons comment accomplir certaines de ces tches partir de Windows PowerShell l'aide de WMI.

Listage des adresses IP d'un ordinateur


Vous pouvez retourner toutes les adresses IP utilises par un ordinateur avec la commande suivante :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE ComputerName . | Select-Object -Property IPAddress

La sortie de cette commande diffre de la plupart des listes de proprits, car les valeurs figurent entre accolades :
IPAddress --------{192.168.1.80} {192.168.148.1} {192.168.171.1} {0.0.0.0}

Pour en comprendre la raison, nous pouvons observer attentivement la proprit IPAddress l'aide de Get-Member :

108
PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Get-Member -Name IPAddress

TypeName: System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapter Configuration

Name ----

MemberType Definition ---------- ---------System.String[] IPAddress {get;}

IPAddress Property

La proprit IPAddress de chaque carte rseau est en ralit un tableau. Les accolades de la dfinition indiquent qu'IPAddress n'est pas une valeur System.String, mais un tableau de valeurs System.String. Vous pouvez dvelopper ces valeurs l'aide du paramtre ExpandProperty de SelectObject :
PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -ExpandProperty IPAddress 192.168.1.80 192.168.148.1 192.168.171.1 0.0.0.0

Listage des donnes de configuration IP


Pour afficher des donnes de configuration IP dtailles pour chaque carte rseau, vous pouvez utiliser la commande suivante :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE ComputerName .

Remarque : L'affichage par dfaut de la configuration des cartes rseau est un jeu trs rduit des informations disponibles. Pour un examen des informations dtailles et de dpannage, utilisez Select-Object pour forcer l'affichage de davantage de proprits. Si les proprits IPX ou WINS ne vous intressent pas (ce qui sera probablement le cas sur un rseau TCP/IP moderne) vous pouvez aussi exclure toutes les proprits qui commencent par WINS ou IPX :

109
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* ExcludeProperty IPX*,WINS*

Cette commande retournera des informations dtailles sur DHCP, DNS, le routage et d'autres proprits de configuration IP mineures.

Test Ping sur des ordinateurs


Vous pouvez excuter un test Ping simple sur un ordinateur l'aide de Win32_PingStatus. La commande suivante effectue le test, mais retourne une sortie longue :
Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .

Les informations rcapitulatives seront plus exploitables si seules les proprits Address, ResponseTime et StatusCode s'affichent :
PS> Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" ComputerName . | Select-Object -Property Address,ResponseTime,StatusCode Address ------127.0.0.1 ResponseTime -----------0 StatusCode ---------0

Le code d'tat 0 indique le succs du test Ping. Vous pouvez effectuer un test Ping sur toute une srie d'ordinateurs l'aide d'un tableau. Parce que nous utilisons ici plusieurs adresses, nous devons utiliser ForEach-Object afin d'excuter un test Ping sparment pour chaque adresse :
"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {GetWmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

Le test Ping d'un sous-rseau entier peut tre effectu selon le mme procd. Par exemple, si vous souhaitez vrifier votre rseau priv qui utilise le numro de rseau 192.168.1.0 et utiliser un masque de sous-rseau de classe C standard (255.255.255.0), seules les adresses de la plage 192.168.1.1 192.168.1.254 sont des adresses locales lgitimes (0 est toujours rserv au numro de rseau et 255 est une adresse de diffusion de sous-rseau). Vous pouvez obtenir un tableau de numros 1 254 dans Windows PowerShell avec l'instruction 1..254 pour permettre un test Ping complet du sous rseau en gnrant le tableau et en ajoutant les valeurs une adresse partielle de l'instruction ping :

110
1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

Remarque : Cette technique de gnration d'une plage d'adresses peut aussi tre utilise ailleurs. Vous pouvez gnrer un jeu complet d'adresses de cette manire :
$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}

Rcupration de proprits de cartes rseau


Prcdemment dans ce guide, nous avons indiqu la possibilit de rcuprer des proprits de configuration gnrale l'aide de Win32_NetworkAdapterConfiguration. Bien qu'elles ne soient pas strictement TCP/IP, les informations sur les cartes rseau telles que les adresses MAC et les types de cartes peuvent servir la comprhension de ce qui se passe sur un ordinateur. Vous pouvez obtenir une synthse de ces informations avec cette commande :
Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .

Assignation du domaine DNS pour une carte rseau


L'assignation du domaine DNS en vue de la rsolution automatique de noms peut tre automatise au moyen de la mthode SetDNSDomain de Win32_NetworkAdapterConfiguration. Parce que vous assignez le domaine DNS de chaque configuration de carte rseau de manire indpendante, vous devez utiliser une instruction ForEach-Object afin de garantir la slection individuelle des cartes :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true ComputerName . | ForEach-Object -Process { $_.InvokeMethod("SetDNSDomain", "fabrikam.com")}

Nous avons ici utilis l'instruction de filtrage IPEnabled=true, car mme sur un rseau qui utilise uniquement TCP/IP, plusieurs des configurations de carte rseau d'un ordinateur ne sont pas de vritables cartes TCP/IP ; elles sont en ralit des lments logiciels qui prennent en charge RAS, PPTP, QoS et d'autres services pour toutes les cartes et n'ont donc pas d'adresse propre. Vous pouvez filtrer la commande en utilisant Where-Object, au lieu du paramtre Filter de Get-WmiObject :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName . | Where-

111
Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.InvokeMethod("SetDNSDomain", "fabrikam.com")}

Tches de configuration DHCP


Modifier des informations DHCP implique l'utilisation d'un ensemble de cartes, tout comme pour la configuration DNS. Les actions que vous pouvez excuter au moyen de WMI sont nombreuses, aussi nous intresserons-nous certaines parmi les plus courantes.

Identification des cartes actives DHCP


Vous pouvez rechercher les cartes actives DHCP sur un ordinateur en utilisant cette commande :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .

Si vous ne recherchez pas les cartes prsentant des problmes de configuration IP, vous pouvez encore affiner la commande en la limitant aussi aux cartes actives IP :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .

Rcupration des proprits DHCP


Les proprits DHCP d'une carte commencent gnralement par DHCP, de sorte que vous pouvez ajouter un lment de pipeline Select-Object -Property DHCP* afin d'obtenir les informations DHCP rsumes relatives aux cartes :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName . | Select-Object -Property DHCP*

Activation de DHCP sur chaque carte


Pour activer globalement DHCP sur toutes les cartes, vous pouvez utiliser la commande :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true ComputerName . | ForEach-Object -Process {$_.InvokeMethod("EnableDHCP", $null)}

Un autre moyen consiste utiliser l'instruction Filter IPEnabled=true and DHCPEnabled=false pour ne pas tenter d'activer DHCP o il l'est dj, mais l'omission de cette tape ne provoque pas d'erreurs.

112

Libration et renouvellement des baux DHCP de certaines cartes


Win32_NetworkAdapterConfiguration est assorti des mthodes ReleaseDHCPLease et RenewDHCPLease. Toutes deux s'utilisent de la mme faon. En rgle gnrale, elles ne vous seront utiles que si vous devez librer ou renouveler les adresses d'une carte sur un sous-rseau spcifique. Le moyen le plus simple de filtrer des cartes sur un sous-rseau consiste choisir uniquement les configurations de cartes qui utilisent la passerelle de ce sous-rseau. Par exemple, la commande suivante libre tous les baux DHCP des cartes de l'ordinateur local qui obtiennent des baux DHCP de 192.168.1.254 :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer contains "192.168.1.254"} | ForEach-Object -Process {$_.InvokeMethod("ReleaseDHCPLease",$null)}

La seule modification pour le renouvellement d'un bail DHCP est l'appel de RenewDHCPLease au lieu de ReleaseDHCPLease :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer contains "192.168.1.254"} | ForEach-Object -Process {$_.InvokeMethod("ReleaseDHCPLease",$null)}

Remarque : Lorsque vous utilisez ces mthodes sur un ordinateur distant, vous pouvez perdre l'accs au systme distant si vous y tes connect via la carte dont le bail est libr ou renouvel.

Libration et renouvellement des baux DHCP de toutes les cartes


Vous pouvez librer ou renouveler globalement les adresses DHCP de toutes les cartes en utilisant les mthodes ReleaseDHCPLeaseAll et RenewDHCPLeaseAll de Win32_NetworkAdapterConfiguration. Toutefois, la commande doit s'appliquer la classe WMI, plutt qu' une carte particulire, car la libration et le renouvellement globaux des baux s'effectuent sur la classe, et non sur une carte spcifique. Vous pouvez obtenir une rfrence une classe WMI, plutt qu'aux instances de la classe, en rpertoriant toutes les classes WMI, puis en ne slectionnant que la classe voulue par son nom. Par exemple, cette commande retourne la classe Win32_NetworkAdapterConfiguration :
Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}

Vous pouvez traiter l'intgralit de la commande en tant que classe, puis appeler dessus la mthode ReleaseDHCPAdapterLease. Dans la commande suivante, des parenthses

113 entourent les lments de pipeline Get-WmiObject et Where-Object pour que leur valuation intervienne en premier :
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ) .InvokeMethod("ReleaseDHCPLeaseAll", $null)

Vous pouvez utiliser le mme format de commande pour appeler la mthode RenewDHCPLeaseAll :
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ) .InvokeMethod("RenewDHCPLeaseAll", $null)

Cration d'un partage rseau


Vous pouvez crer un partage rseau l'aide de la mthode Create de Win32_Share :
(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).InvokeMethod("Create",("C:\temp","TempShare",0,25,"partage test du dossier temporaire"))

Vous pouvez galement crer le partage en utilisant net share dans Windows PowerShell :
net share tempshare=c:\temp /users:25 /remark:"partage test du dossier temporaire"

Suppression d'un partage rseau


Vous pouvez supprimer un partage rseau avec Win32_Share, mais le processus diffre lgrement de la cration d'un partage, car vous devez rcuprer le partage spcifique supprimer, plutt que la classe Win32_Share. L'instruction suivante supprime le partage TempShare :
(Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='TempShare'").InvokeMethod("Delete",$null)

Net share fonctionne galement :


PS> net share tempshare /delete Suppression de tempshare russie.

114

Connexion d'un lecteur rseau accessible par Windows


New-PSDrive vous permet de crer un lecteur Windows PowerShell, mais les lecteurs ainsi crs sont disponibles uniquement pour Windows PowerShell. Pour crer un lecteur rseau, vous pouvez utiliser l'objet COM WScript.Network. La commande ci-dessous mappe le partage \\FPS01\users au lecteur local B:.
(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")

La commande net use fonctionne galement :


net use B: \\FPS01\users

Les lecteurs mapps avec WScript.Network ou net use sont immdiatement disponibles pour Windows PowerShell.

Utilisation des fichiers et dossiers


La navigation sur les lecteurs Windows PowerShell et la manipulation des lments qui s'y trouvent sont semblables la manipulation des fichiers et des dossiers sur les lecteurs de disques physiques de Windows. Nous verrons dans cette section comment traiter des tches spcifiques de manipulation des fichiers et dossiers.

Listage de tous les fichiers et dossiers d'un dossier


Vous pouvez obtenir tous les lments situs directement dans un dossier en utilisant Get-ChildItem. Ajoutez le paramtre Force optionnel pour afficher les lments masqus ou systme. Par exemple, cette commande affiche le contenu direct du lecteur Windows PowerShell C (qui correspond au lecteur C physique de Windows) :
Get-ChildItem -Force C:\

Cette commande rpertorie uniquement les lments contenus directement, de manire trs similaire l'utilisation de DIR dans Cmd.exe ou de ls dans un environnement UNIX. Pour afficher les lments contenus, vous devez aussi spcifier le paramtre - Recurse. (Le temps ncessaire l'opration peut tre trs long.) Pour rpertorier tous les lments du lecteur C, utilisez cette commande :
Get-ChildItem -Force C:\ -Recurse

Get-ChildItem peut filtrer des lments avec ses paramtres Path, Filter, Include et Exclude, mais ceux-ci se basent en gnral uniquement sur le nom. Vous pouvez

115 effectuer un filtrage complexe selon d'autres proprits d'lments en utilisant Where-Object. La commande suivante recherche tous les fichiers excutables du dossier Program Files er dont la dernire modification a t effectue aprs le 1 octobre 2005 et dont la taille n'est ni infrieure 1 mgaoctet, ni suprieure 10 mgaoctets :
Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object FilterScript {($_.LastWriteTime -gt "2005-10-01") -and ($_.Length -ge 1m) -and ($_.Length -le 10m)}

Copie de fichiers et de dossiers


La copie s'effectue avec Copy-Item. La commande suivante sauvegarde C:\boot.ini en C:\boot.bak :
Copy-Item -Path c:\boot.ini -Destination c:\boot.bak

Si le fichier de destination existe dj, la tentative de copie choue. Pour remplacer une destination prexistante, utilisez le paramtre Force :
Copy-Item -Path c:\boot.ini -Destination c:\boot.bak -Force

Cette commande fonctionne mme lorsque la destination est en lecture seule. La copie de dossiers fonctionne de la mme manire. Cette commande copie le dossier C:\temp\test1 dans le nouveau dossier c:\temp\DeleteMe de manire rcursive :
Copy-Item C:\temp\test1 -Recurse c:\temp\DeleteMe

Vous pouvez galement copier une slection d'lments. La commande suivante copie dans c:\temp\text tous les fichiers .txt contenus n'importe o dans c:\data :
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination c:\temp\text

Vous pouvez toujours utiliser d'autres outils pour excuter des copies de systme de fichiers. Les objets XCOPY, ROBOCOPY et COM, tels que Scripting.FileSystemObject, fonctionnent tous dans Windows PowerShell. Par exemple, vous pouvez utiliser la classe COM de l'objet Windows Script Host Scripting.FileSystem pour sauvegarder C:\boot.ini en C:\boot.bak :
(New-Object -ComObject Scripting.FileSystemObject).CopyFile("c:\boot.ini", "c:\boot.bak")

116

Cration de fichiers et de dossiers


La cration d'lments fonctionne de la mme manire sur tous les fournisseurs de Windows PowerShell. Si un fournisseur de Windows PowerShell a plusieurs types d'lments (par exemple, le fournisseur FileSystem de Windows PowerShell fait la distinction entre rpertoires et fichiers), vous devez spcifier le type d'lment. Cette commande cre le dossier C:\temp\New Folder :
New-Item -Path 'C:\temp\New Folder' -ItemType "directory"

Cette commande cre le fichier vide C:\temp\New Folder\file.txt :


New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType "file"

Suppression de tous les fichiers et dossiers d'un dossier


Vous pouvez supprimer des lments contenus l'aide de Remove-Item, mais vous serez invit confirmer la suppression si un lment en contient d'autres. Par exemple, si vous essayez de supprimer le dossier C:\temp\DeleteMe qui contient d'autres lments, Windows PowerShell vous demande une confirmation avant de supprimer le dossier :
Remove-Item C:\temp\DeleteMe Confirmer L'lment situ l'emplacement C:\temp\DeleteMe a des enfants et le paramtre -recurse n'a pas t spcifi. Si vous continuez, tous les enfants supprims avec l'lment. tes-vous sr de vouloir continuer ? [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide seront

(la valeur par dfaut est O (Oui) ) :

Si vous ne souhaitez pas qu'une confirmation vous soit demande pour chaque lment contenu, spcifiez le paramtre Recurse :
Remove-Item C:\temp\DeleteMe -Recurse

Mappage d'un dossier local en tant que lecteur accessible par Windows
Vous pouvez galement mapper un dossier local l'aide de la commande subst. La commande suivante cre un lecteur local P: ayant pour racine le rpertoire Program Files local :

117
subst p: $env:programfiles

Comme avec les lecteurs rseau, les lecteurs mapps dans Windows PowerShell l'aide de subst sont immdiatement visibles pour la session de Windows PowerShell.

Lecture d'un fichier texte en tant que tableau


Les donnes textuelles sont souvent stockes dans un fichier dont chacune des lignes est traite comme des lments de donnes distincts. L'applet de commande GetContent peut tre utilise pour lire un fichier entier en une tape, comme indiqu ici :
PS> Get-Content -Path C:\boot.ini [boot loader] timeout=5 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=AlwaysOff /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional with Data Execution Prevention" /noexecute=optin /fastdetect

Get-Content traite dj les donnes lues du fichier comme un tableau, avec un lment par ligne de contenu du fichier. Vous pouvez le constater en vrifiant la longueur (Length) du contenu retourn :
PS> (Get-Content -Path C:\boot.ini).Length 6

Cette commande est trs utile pour obtenir des listes d'informations directement dans Windows PowerShell. Par exemple, vous pouvez stocker une liste de noms d'ordinateurs ou d'adresses IP dans un fichier C:\temp\domainMembers.txt, avec un nom sur chaque ligne du fichier. Vous pouvez utiliser Get-Content pour rcuprer le contenu du fichier et le stocker dans la variable $Computers :
$Computers = Get-Content -Path C:\temp\DomainMembers.txt

$Computers est maintenant un tableau qui contient un nom d'ordinateur dans chaque lment.

Utilisation des cls de Registre


Parce que les cls de Registre sont des lments sur les lecteurs Windows PowerShell, leur utilisation est trs semblable celle des fichiers et dossiers. Il existe toutefois une diffrence essentielle : chaque lment d'un lecteur Windows PowerShell bas sur le

118 Registre est un conteneur, au mme titre qu'un dossier sur un lecteur de systme de fichiers. Les entres de Registre et leurs valeurs associes sont quant elles des proprits des lments et non des lments distincts.

Listage de toutes les sous-cls d'une cl de Registre


Vous pouvez afficher tous les lments situs directement dans une cl de Registre en utilisant Get-ChildItem. Ajoutez le paramtre Force optionnel pour afficher les lments masqus ou systme. Par exemple, cette commande affiche les lments situs directement sur le lecteur Windows PowerShell HKCU:, qui correspond la ruche de Registre HKEY_CURRENT_USER :
PS> Get-ChildItem -Path hkcu:\

Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER SKC --2 7 25 0 1 4 ... VC -0 33 1 5 7 0 Name ---AppEvents Console Control Panel Environment Identities Keyboard Layout Property -------{} {ColorTable00, ColorTable01, ColorTab... {Opened} {APR_ICONV_PATH, INCLUDE, LIB, TEMP...} {Last Username, Last User ... {}

Il s'agit des cls de niveau suprieur visibles sous HKEY_CURRENT_USER dans l'diteur du Registre (Regedit.exe). Vous pouvez galement spcifier ce chemin d'accs de Registre en spcifiant le nom du fournisseur du Registre, Registry, suivi de :: . Le nom complet du fournisseur de Registre est Microsoft.PowerShell.Core\Registry, mais il peut tre raccourci seulement Registry. Chacune des commandes suivantes fournit la liste du contenu situ directement sous HKCU :
Get-ChildItem Get-ChildItem Get-ChildItem Get-ChildItem Get-ChildItem -Path -Path -Path -Path HKCU: Registry::HKEY_CURRENT_USER Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER Registry::HKCU Microsoft.PowerShell.Core\Registry::HKCU

Ces commandes rpertorient uniquement les lments contenus directement, de manire trs similaire l'utilisation de DIR dans Cmd.exe ou de ls dans un environnement UNIX. Pour afficher les lments contenus, vous devez spcifier le paramtre Recurse. Pour rpertorier toutes les cls de Registre de HKCU, utilisez la commande suivante (cette opration peut tre trs longue) :

119
Get-ChildItem -Path hkcu:\ -Recurse

Get-ChildItem peut effectuer des oprations de filtrage trs complexes grces ses paramtres Path, Filter, Include et Exclude, mais ceux-ci se basent en gnral uniquement sur le nom. Vous pouvez effectuer un filtrage complexe selon d'autres proprits d'lments en utilisant l'applet de commande Where-Object. La commande suivante recherche toutes les cls de HKCU:\Software qui ne comportent pas plus d'une sous-cl et ont galement quatre valeurs exactement :
Get-ChildItem -Path HKCU:\Software -Recurse | Where-Object -FilterScript {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }

Copie de cls
La copie s'effectue avec Copy-Item. La commande suivante copie HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion et toutes ses proprits dans HKCU:\, en crant une cl nomme CurrentVersion :
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu:

Si vous examinez cette nouvelle cl dans l'diteur du Registre ou en utilisant GetChildItem, vous remarquerez que le nouvel emplacement ne comporte pas de copies des sous-cls contenues. Pour copier tout le contenu d'un conteneur, vous devez spcifier le paramtre Recurse. Pour rendre rcursive la commande de copie prcdente, utilisez cette commande :
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu: -Recurse

Vous pouvez toujours utiliser les autres outils dont vous disposez pour effectuer des copies de systme de fichiers. Tous les outils d'dition du Registre, y compris reg.exe, regini.exe et regedit.exe, et les objets COM qui prennent en charge l'dition du Registre (comme WScript.Shell et la classe WMI StdRegProv), peuvent tre utiliss partir de Windows PowerShell.

Cration de cls
La cration de cls dans le Registre est plus simple que la cration d'un lment dans un systme de fichiers. Parce que toutes les cls de Registre sont des conteneurs, vous n'avez pas besoin de spcifier le type d'lment ; il vous suffit de fournir un chemin d'accs explicite, tel que :
New-Item -Path hkcu:\software\_DeleteMe

120 Vous pouvez galement utiliser un chemin d'accs bas sur fournisseur pour spcifier une cl :
New-Item -Path Registry::HKCU\_DeleteMe

Suppression de cls
La suppression d'lments est essentiellement la mme pour tous les fournisseurs. Les commandes suivantes suppriment des lments silencieusement :
Remove-Item -Path hkcu:\Software\_DeleteMe Remove-Item -Path 'hkcu:\key with spaces in the name'

Suppression de toutes les cls d'une cl spcifique


Vous pouvez supprimer des lments contenus l'aide de Remove-Item, mais vous serez invit confirmer la suppression si un lment en contient d'autres. Par exemple, si nous essayons de supprimer la sous-cl HKCU:\CurrentVersion que nous avons cre, nous obtenons ceci :
Remove-Item -Path hkcu:\CurrentVersion Confirmer L'lment situ l'emplacement HKCU:\CurrentVersion\AdminDebug a des enfants et le paramtre -recurse n'a pas t spcifi. Si vous continuez, tous les enfants seront supprims avec l'lment. tes-vous sr de vouloir continuer ? [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide

(la valeur par dfaut est O (Oui) ) :

Pour supprimer des lments contenus sans demande de confirmation, spcifiez le paramtre -Recurse :
Remove-Item -Path HKCU:\CurrentVersion -Recurse

Si vous souhaitez supprimer tous les lments situs sous HKCU:\CurrentVersion, mais pas HKCU:\\CurrentVersion lui-mme, vous pouvez utiliser la place :
Remove-Item -Path HKCU:\CurrentVersion\* -Recurse

121

Utilisation d'entres du Registre


Parce que les entres du Registre sont des proprits de cls et qu'en tant que telles, elles ne peuvent pas tre directement parcourues, nous devons adopter une approche lgrement diffrente pour les utiliser.

Listage des entres du Registre


Il existe de nombreuses manires d'examiner des entres du Registre. Le moyen le plus simple consiste obtenir les noms des proprits associes une cl. Par exemple, pour consulter les noms des entres de la cl de Registre HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion, utilisez GetItem. Les cls de Registre ont une proprit portant le nom gnrique Property qui est une liste des entres de Registre de cette cl. La commande suivante slectionne la proprit Property et dveloppe les lments afin de les prsenter sous forme de liste :
PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | SelectObject -ExpandProperty Property DevicePath MediaPathUnexpanded ProgramFilesDir CommonFilesDir ProductId

Pour consulter les entres du Registre sous une forme plus lisible, utilisez GetItemProperty :
PS> Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

PSPath

: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO FTWARE\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO FTWARE\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesDir : C:\Program Files CommonFilesDir : C:\Program Files\Common Files ProductId : 76487-338-1167776-22465 WallPaperDir : C:\WINDOWS\Web\Wallpaper MediaPath : C:\WINDOWS\Media ProgramFilesPath : C:\Program Files

122
PF_AccessoriesName (default) : Accessories :

Les proprits de la cl lies Windows PowerShell ont toutes le prfixe PS , comme PSPath, PSParentPath, PSChildName et PSProvider. Vous pouvez utiliser la notation . pour faire rfrence l'emplacement actuel. Vous pouvez utiliser Set-Location pour accder d'abord au conteneur de Registre CurrentVersion :
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

Vous pouvez aussi utiliser le lecteur intgr Windows PowerShell HKLM: avec SetLocation :
Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion

Vous pouvez ensuite utiliser la notation . pour l'emplacement actuel afin de rpertorier les proprits sans spcifier de chemin d'accs complet :
PS> Get-ItemProperty -Path . ... DevicePath : C:\WINDOWS\inf MediaPathUnexpanded : C:\WINDOWS\Media ProgramFilesDir : C:\Program Files ...

L'extension de chemin d'accs fonctionne de la mme manire que sur le systme de fichiers, de sorte que de cet emplacement, vous pouvez obtenir le listage ItemProperty de HKLM:\SOFTWARE\Microsoft\Windows\Help en utilisant Get-ItemProperty -Path ..\Help.

Obtention d'une seule entre du Registre


Si vous souhaitez rcuprer une entre spcifique d'une cl de Registre, plusieurs possibilits s'offrent vous. Cet exemple recherche la valeur de DevicePath dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion. l'aide de Get-ItemProperty, utilisez le paramtre Path pour spcifier le nom de la cl et le paramtre Name pour spcifier le nom de l'entre DevicePath.
PS> Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath

PSPath

: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows\CurrentVersion

123
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry DevicePath : C:\WINDOWS\inf

Cette commande retourne les proprits Windows PowerShell standard et la proprit DevicePath. Remarque : Bien que Get-ItemProperty ait les paramtres Filter, Include et Exclude, ceux-ci ne permettent pas le filtrage par nom de proprit. Ils font rfrence aux cls de Registre, qui sont des chemins d'accs aux lments, et non aux entres de Registre, qui sont des proprits d'lments. Une autre possibilit consiste utiliser l'outil de ligne de commande Reg.exe. Pour obtenir de l'aide sur reg.exe, tapez reg.exe /? une invite de commandes. Pour rechercher l'entre DevicePath, utilisez reg.exe comme indiqu dans la commande suivante :
PS> reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion DevicePath REG_EXPAND_SZ %SystemRoot%\inf

Vous pouvez aussi utiliser l'objet COM WshShell pour rechercher des entres du Registre, bien que cette mthode ne fonctionne pas avec des donnes binaires volumineuses ou avec les noms d'entres de Registre qui incluent des caractres tels que \ ). Ajoutez le nom de la proprit au chemin d'accs de l'lment avec un sparateur \ :
PS> (New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath") %SystemRoot%\inf

Cration d'entres de Registre


Pour ajouter une nouvelle entre nomme PowerShellPath la cl CurrentVersion, utilisez New-ItemProperty avec le chemin d'accs la cl, le nom de l'entre et sa valeur. Pour cet exemple, nous prendrons la valeur de la variable Windows PowerShell

124 $PSHome, qui stocke le chemin d'accs au rpertoire d'installation de Windows PowerShell. Vous pouvez ajouter la nouvelle entre la cl en utilisant la commande suivante, laquelle retourne galement des informations sur la nouvelle entre :
PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome

PSPath

: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR E\Microsoft\Windows\CurrentVersion PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR E\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

La valeur de PropertyType doit tre le nom d'un membre de l'numration Microsoft.Win32.RegistryValueKind du tableau suivant : Valeur PropertyType Binary DWord ExpandString Signification Donnes binaires Nombre UInt32 valide Chane pouvant contenir des variables d'environnement dveloppes dynamiquement Chane multiligne Toute valeur de chane 8 octets de donnes binaires

MultiString String QWord Remarque :

Vous pouvez ajouter une entre de Registre plusieurs endroits en spcifiant un tableau de valeurs pour le paramtre Path :
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome

125 Vous pouvez galement remplacer une valeur d'entre de Registre prexistante en ajoutant le paramtre Force toute commande New-ItemProperty.

Affectation d'un nouveau nom des entres de Registre


Pour renommer l'entre PowerShellPath en PSHome , utilisez RenameItemProperty :
Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome

Pour afficher la valeur renomme, ajoutez le paramtre PassThru la commande.


Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru

Suppression d'entres de Registre


Pour supprimer les entres de Registre PSHome et PowerShellPath, utilisez RemoveItemProperty :
Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath

Annexe 1 - Alias de compatibilit


Windows PowerShell propose diffrents alias de transition qui permettent aux utilisateurs d'Unix et de Cmd d'employer dans Windows PowerShell les noms de commandes auxquels ils sont habitus. Les alias les plus courants sont prsents dans le tableau cidessous, avec la commande Windows PowerShell correspondant l'alias et l'alias Windows PowerShell standard, le cas chant. Remarque : Vous pouvez trouver la commande PowerShell laquelle correspond un alias en utilisant Get-Alias. Par exemple : PS> Get-Alias cls
CommandType Name Definition

126
----------Alias ---cls ---------Clear-Host

Commande CMD dir cls del, erase, rmdir copy move rename type cd md N/A N/A

Commande Unix ls clear rm cp mv mv cat cd mkdir pushd popd

Commande PS Get-ChildItem Clear-Host (fonction) Remove-Item Copy-Item Move-Item Rename-Item Get-Content Set-Location New-Item Push-Location Pop-Location

Alias PS gci N/A ri ci mi rni gc sl ni N/A N/A

Annexe 2 - Cration d'un raccourci PowerShell personnalis


La procdure suivante vous guide dans la cration d'un raccourci vers PowerShell pourvu de plusieurs options personnalises utiles. 1. Crez un raccourci qui pointe vers powershell.exe. 2. Cliquez avec le bouton droit sur le raccourci et slectionnez Proprits. 3. Cliquez sur l'onglet Options. 4. Pour activer la slection et la copie au moyen de la souris, sous Options d'dition, activez la case cocher Edition Rapide. Vous pouvez alors slectionner du texte dans la fentre de la console PowerShell en faisant glisser le bouton gauche de la souris, puis copier le texte dans le Presse-papiers soit en appuyant sur la touche Entre, soit en cliquant avec le bouton droit.

127 5. Dans Options d'dition, activez la case cocher Mode insertion. Vous pouvez alors cliquer avec le bouton droit dans la fentre de la console pour coller automatiquement le texte du Presse-papiers. 6. Dans Historique des commandes, dans la zone de slection numrique Taille de la mmoire tampon, tapez ou slectionnez un nombre compris entre 1 et 999. Cela dfinit le nombre des commandes tapes qui seront conserves dans la mmoire tampon de la console. 7. Dans Historique des commandes, activez la case cocher Supprimer les doublons pour liminer des commandes rptes de la mmoire tampon de la console. 8. Cliquez sur l'onglet Disposition. 9. Dans la zone de groupe Taille de la mmoire tampon cran, tapez un nombre compris entre 1 et 9999 dans la case de dfilement Hauteur. La hauteur reprsente le nombre de lignes de la sortie mise en mmoire tampon. Il s'agit du nombre maximal de lignes conserv pour l'affichage lorsque vous faites dfiler la fentre de la console. Si ce nombre est infrieur la hauteur indique dans la zone Taille de la fentre, la hauteur de cette zone est automatiquement rduite la mme valeur. 10. Dans la zone de groupe Taille de la fentre, tapez un nombre compris entre 1 et 9999 pour la largeur. Celle-ci reprsente le nombre des caractres qui s'affichent horizontalement dans la fentre de la console. La largeur par dfaut est 80 et la mise en forme de sortie de PowerShell est conue pour cette largeur. 11. Si vous souhaitez placer la console un endroit particulier du Bureau lorsqu'il est ouvert, dans la zone de groupe Position de la fentre, dsactivez la case cocher Positionne par le systme, puis, dans Position de la fentre, modifiez les valeurs de Gauche et Haut. 12. Lorsque vous avez termin, cliquez sur le bouton OK.

Vous aimerez peut-être aussi