Beruflich Dokumente
Kultur Dokumente
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
10
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.
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.
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.
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.
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.
14
15
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.
17 sortie d'application retourne la fentre de la console ; il n'affecte pas le fonctionnement interne de l'application.
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
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.
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>]...
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
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
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.
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
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>
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>
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
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.
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;}
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
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.
Vous pouvez galement spcifier une proprit autre que celle par dfaut :
PS> Get-Process -Name powershell | Format-Wide -Property Id
34
2760
3448
: : : : : : : :
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
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.
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.
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
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
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
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 ...
: : : :
: : : : : : : :
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.
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] ...
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
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
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.
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.
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
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
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.
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
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
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:
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.
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
52
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
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.
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]*
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
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---
Mode ----a---
57
Cmdlet Cmdlet Rename-Item Set-Item Rename-Item [-Path] <String>... Set-Item [-Path] <String[]> ...
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.
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.
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
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
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
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
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
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
__NAMESPACE __Win32Provider
64
: : : : : :
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
: : : : :
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.
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 ?
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
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
Maintenant que nous disposons d'une rfrence un journal des vnements stocke dans la variable $RemoteAppLog, quelles tches pouvons-nous effectuer dessus ?
68
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
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.
Get-Member fonctionne avec les objets COM, de sorte que vous pouvez explorer les membres de l'objet en tapant :
PS> $WshShell | Get-Member
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 ----------
...
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}
MemberType ----------
Definition ----------
Method
void Save ()
Property
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()
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
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.
74 Bien que l'objet soit effectivement cr, vous tes averti qu'il ne s'agit pas d'un objet COM standard.
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.
75
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 vrifier si l'ordinateur est en cours d'arrt en affichant la proprit HasShutdownStarted :
PS> [System.Environment]::HasShutdownStarted False
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)
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
-contains -notcontains
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
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
-not
-not (1 -eq 2)
!(1 -eq 2)
82
PS> Get-WmiObject -Class Win32_LogicalDisk
: : : : : :
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}
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.
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
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.
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
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:
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
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.
88 soit de paramtres, soit des applets de commande Object, vous pouvez effectuer certaines tches complexes en utilisant uniquement ces deux applets de commande.
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
Id -1684 728
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
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 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
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
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
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) ...
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 . .
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]*.
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
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.
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
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
En voici une version plus succincte qui utilise des caractres gnriques :
Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object Property *user*
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
Day DayOfWeek Hour Milliseconds Minute Month Quarter Second WeekInMonth Year
: : : : : : : : : :
15 4 12 11 6 2 52 3 2006
99
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
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.
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") }
Toutefois, il est possible que ces chanes ncessitent quelques modifications pour tre utilisables partir de l'invite de Windows PowerShell.
105
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.
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)
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.
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.
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')
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
Name ----
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
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.
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." + $_}
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")}
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 .
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
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.
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)
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"
114
Les lecteurs mapps avec WScript.Network ou net use sont immdiatement disponibles pour Windows PowerShell.
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)}
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
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.
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.
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.
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'
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
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.
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
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
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.
126
----------Alias ---cls ---------Clear-Host
Commande CMD dir cls del, erase, rmdir copy move rename type cd md N/A N/A
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
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.