Go pro: le guide de l'utilisateur de PowerShell

Si vous avez lutté avec Windows 10, vous avez sans aucun doute entendu parler de PowerShell. Si vous avez récemment essayé de faire quelque chose de sophistiqué avec Win7 / 8.1, PowerShell est probablement également apparu. Après des années à compter sur la ligne de commande Windows et sur des fichiers de commandes groupés, il est temps de se tourner vers quelque chose de plus puissant, de plus adaptatif, de meilleur.

PowerShell est un énorme ajout à la boîte à outils Windows, et il peut provoquer un peu de peur étant donné cette énormité. Est-ce un langage de script, un shell de commande, une cire de sol? Devez-vous lier une applet de commande à une classe .Net instanciée pour s'exécuter avec des fournisseurs? Et pourquoi tous les documents d’assistance parlent d’administrateurs: dois-je être un administrateur Windows professionnel pour l’utiliser?

Se détendre. PowerShell est puissant, mais il n'a pas besoin d'être intimidant.

Le guide suivant est destiné à ceux qui ont exécuté une ou deux commandes Windows ou qui ont jimmied un fichier de commandes. Considérez cela comme une transformation étape par étape de PowerShell curieux à PowerShell capable.

Étape 1: Montez le tout

La première chose dont vous aurez besoin est PowerShell lui-même. Si vous utilisez Windows 10, vous avez déjà installé PowerShell 5, la dernière version. (Win10 Anniversary Update a 5.1, mais vous ne saurez pas la différence avec la mise à jour d'automne 5.0.) Windows 8 et 8.1 sont livrés avec PowerShell 4, ce qui est assez bon pour vous mouiller les pieds. L'installation de PowerShell sur Windows 7 n'est pas difficile, mais cela demande une attention particulière - et vous devez installer .Net Framework séparément. JuanPablo Jofre explique comment installer WMF 5.0 (Windows Management Framework), qui inclut PowerShell, en plus des outils que vous n'utiliserez probablement pas au démarrage, sur MSDN.

PowerShell propose deux interfaces. Les utilisateurs avancés opteront pour la GUI complète, connue sous le nom d'environnement de script intégré (ISE). Les débutants, cependant, sont mieux servis par la console PowerShell, une interface de texte simple rappelant la ligne de commande Windows, ou même DOS 3.2.

Pour démarrer PowerShell en tant qu'administrateur à partir de Windows 10, cliquez sur Démarrer et faites défiler la liste des applications jusqu'à Windows PowerShell. Cliquez sur cette ligne, cliquez avec le bouton droit sur Windows PowerShell et choisissez Exécuter en tant qu'administrateur. Dans Windows 8.1, recherchez Windows PowerShell dans le dossier Système Windows. Dans Win7, il se trouve dans le dossier Accessoires. Vous pouvez exécuter PowerShell en tant qu'utilisateur «normal» en suivant la même séquence mais avec un clic gauche.

Dans n'importe quelle version de Windows, vous pouvez utiliser la recherche Windows pour rechercher PowerShell. Sous Windows 8.1 et Windows 10, vous pouvez le placer sur votre «menu d'alimentation» Ctrl-X (cliquez avec le bouton droit sur un espace vide de la barre des tâches et choisissez Propriétés; sous l'onglet Navigation, cochez la case Remplacer l'invite de commande). Une fois que vous l'avez ouvert, c'est une bonne idée d'épingler PowerShell à votre barre des tâches. Oui, vous allez l'aimer autant.

Étape 2: Tapez des commandes Windows à l'ancienne

Vous seriez surpris de voir à quel point la syntaxe de ligne de commande Windows fonctionne comme prévu dans PowerShell.

Par exemple, cdchange de répertoire (aka dossiers), et dirrépertorie toujours tous les fichiers et dossiers inclus dans le dossier actuel.

Selon la façon dont vous démarrez la console PowerShell, vous pouvez démarrer à c:\Windows\system32ou à c:\Users\. Dans l'exemple de capture d'écran, j'utilise cd ..(notez l'espace) pour monter d'un niveau à la fois, puis j'exécute dirpour répertorier tous les fichiers et sous-dossiers du C:\répertoire.

Étape 3: Installez les fichiers d'aide

Les commandes comme cdet dirne sont pas des commandes PowerShell natives. Ce sont des alias, des substituts aux vraies commandes PowerShell. Les alias peuvent être utiles pour ceux d'entre nous dont la mémoire digitale est difficile à surmonter. Mais ils ne commencent même pas à toucher les parties les plus importantes de PowerShell.

Pour commencer à avoir une idée de PowerShell lui-même, tapez helpsuivi d'une commande que vous connaissez. Par exemple, dans la capture d'écran, je tape help dir.

L'aide PowerShell m'indique qu'il dirs'agit d'un alias pour la commande PowerShell Get-ChildItem. Effectivement, si vous tapez get-childitemà l' PS C:\>invite, vous voyez exactement ce que vous avez vu avec la dircommande.

Comme indiqué au bas de la capture d'écran, les fichiers d'aide pour PowerShell ne sont pas installés automatiquement. Pour les récupérer (vous ne voulez les obtenir), connectez - vous à PowerShell en mode Administrateur, puis tapez update-help. L'installation des fichiers d'aide prendra plusieurs minutes et il se peut que vous manquiez quelques modules. L'aide pour NetWNV et SecureBoot n'a pas pu être installée sur ma machine de test. Mais lorsque vous avez terminé, le système d'aide complet sera à votre disposition.

À partir de là, tapez get-helpsuivi de la commande («cmdlet» dans PowerShell speak, prononcée «command-let») qui vous concerne et consultez toute l'aide pour cet élément. Par exemple, get-help get-childitemproduit un résumé des get-childitemoptions. Il vous invite également à saisir des variations sur le thème. Ainsi, ce qui suit:

get-help get-childitem -examples

produit sept exemples détaillés d'utilisation get-childitem. La commande PowerShell

get-help get-childitem -detailed

inclut ces sept exemples, ainsi qu'une explication détaillée de chaque paramètre disponible pour l' get-childitemapplet de commande.

Étape 4: Obtenez de l'aide sur les paramètres

Dans la help dircapture d'écran, vous avez peut-être remarqué qu'il y a deux listes sous SYNTAXpour get-childitem. Le fait qu'il existe deux syntaxes distinctes pour la cmdlet signifie qu'il existe deux façons d'exécuter la cmdlet. Comment séparez-vous les syntaxes et que signifient les paramètres? La réponse est simple, si vous connaissez le truc.

Pour obtenir tous les détails sur les paramètres de la get-childitemcmdlet ou de toute autre cmdlet, utilisez le -fullparamètre, comme ceci:

get-help get-childitem -full

Cela produit une liste ligne par ligne de ce que vous pouvez faire avec l'applet de commande et de ce qui peut (ou non!) Se produire. Voir la capture d'écran.

En parcourant les détails des paramètres, il est raisonnablement facile de voir qui get-childitempeuvent être utilisés pour récupérer des éléments «enfants» (tels que les noms de sous-dossiers ou de fichiers) à un emplacement que vous spécifiez, avec ou sans correspondance de caractères spécifiques. Par exemple:

get-childItem “*.txt” -recurse

récupère une liste de tous les *.txtfichiers « » dans le dossier actuel et tous les sous-dossiers (en raison du -recurseparamètre). Attendu que ce qui suit:

get-childitem “HKLM:\Software”

renvoie une liste de toutes les clés de registre de haut niveau dans HKEY_LOCAL_MACHINE\Software.

Si vous avez déjà essayé d'entrer dans le registre à l'aide d'une ligne de commande Windows ou d'un fichier de commandes, je suis sûr que vous pouvez voir à quel point ce type d'accès doit être puissant.

Étape 5: Clouez les noms

Il y a une raison pour laquelle les cmdlets que nous avons vu regarder loin le même: get-childitem, update-helpet get-helptous suivent la même convention verbe-nom. Heureusement, toutes les applets de commande de PowerShell utilisent cette convention, avec un verbe précédant un nom (singulier). Ceux d'entre vous qui ont passé des semaines à se débattre sur des commandes VB et VBA nommées de manière incohérente peuvent pousser un soupir de soulagement.

Pour voir où nous allons, jetez un œil à certaines des applets de commande les plus courantes (grâce au blog Hey, Scripting Guy! D'Ed Wilson). Commencez par les applets de commande qui atteignent votre système et extrayez des informations utiles, comme les suivantes:

  • set-location: Définit l'emplacement de travail actuel sur un emplacement spécifié
  • get-content: Récupère le contenu d'un fichier
  • get-item: Obtient des fichiers et des dossiers
  • copy-item: Copie un élément d'un emplacement à un autre
  • remove-item: Supprime les fichiers et les dossiers
  • get-process: Obtient les processus qui s'exécutent sur un ordinateur local ou distant
  • get-service: Obtient les services en cours d'exécution sur un ordinateur local ou distant
  • invoke-webrequest: Récupère le contenu d'une page Web sur Internet

Pour voir comment une applet de commande particulière fonctionne, utilisez get-help, comme dans

get-help copy-item -full

Sur la base de sa description d'aide, vous pouvez facilement déterminer ce que la cmdlet veut. Par exemple, si vous souhaitez copier tous vos fichiers et dossiers de Documentsvers c:\temp, vous utiliserez:

copy-item c:\users\[username] \documents\* c:\temp

Au fur et à mesure que vous tapez cette commande, vous verrez quelques touches intéressantes intégrées à l'environnement PowerShell. Par exemple, si vous tapez copy-iet appuyez sur la touche Tab, PowerShell remplit Copy-Itemet un espace. Si vous avez mal saisi une applet de commande et que PowerShell ne peut pas le comprendre, vous obtenez une description très détaillée de ce qui n'a pas fonctionné.

Essayez cette applet de commande. (Il peut essayer de vous amener à installer un programme pour lire la boîte «à propos de». Si tel est le cas, ignorez-le.)

invoke-webrequest askwoody.com

Vous obtenez une liste succincte des déclarations de contenu, des en-têtes, des images, des liens et plus encore de la page Web. Voyez comment cela fonctionne? Remarquez dans la get-helpliste invoke-webrequestque l' invoke-webrequestapplet de commande «renvoie des collections de formulaires, de liens, d'images et d'autres éléments HTML importants» - exactement ce que vous devriez voir sur votre écran.

Certaines applets de commande vous aident à contrôler ou à gérer PowerShell lui-même:

  • get-command: Répertorie toutes les applets de commande disponibles (c'est une longue liste!)
  • get-verb: Répertorie tous les verbes disponibles (les moitiés gauche des applets de commande)
  • clear-host: Efface l'affichage dans le programme hôte

Divers paramètres (rappelez get-help-vous) vous permettent de réduire les commandes et de restreindre les options qui peuvent vous être utiles. Par exemple, pour voir une liste de toutes les applets de commande qui fonctionnent avec les services Windows, essayez ceci:

get-command *-service

Il répertorie tous les verbes disponibles avec servicecomme nom. Voici le résultat:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

Vous pouvez combiner ces applets de commande avec d'autres applets de commande pour explorer presque n'importe quelle partie de PowerShell. C'est là que les tuyaux entrent en scène.

Étape 6: Apportez les tuyaux

Si vous avez déjà utilisé la ligne de commande Windows ou parcouru un fichier de commandes, vous connaissez la redirection et les canaux. En termes simples, la redirection (le  >caractère) et les tubes (le |caractère) prennent la sortie d'une action et la collent ailleurs. Vous pouvez, par exemple, rediriger la sortie d'une dircommande vers un fichier texte, ou «canaliser» le résultat d'une pingcommande dans un find, pour filtrer les résultats intéressants, comme ceci:

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

Dans la deuxième commande ci-dessus, la findcommande recherche la chaîne packetsdans la sortie canalisée d'un askwoody.com pinget colle toutes les lignes qui correspondent dans un fichier appelé temp2.txt.

Peut-être étonnamment, la première de ces commandes fonctionne bien dans PowerShell. Pour exécuter la deuxième commande, vous voulez quelque chose comme ceci:

ping askwoody.com | select-string packets | out-file temp2.txt

L'utilisation de la redirection et des canaux étend considérablement les capacités de la ligne de commande Windows: au lieu de faire défiler sans fin un écran à la recherche d'une chaîne de texte, par exemple, vous pouvez assembler une commande Windows acheminée qui effectue la vérification à votre place.

PowerShell a une capacité de tuyauterie, mais elle n'est pas limitée au texte. Au lieu de cela, PowerShell vous permet de transmettre un objet entier d'une applet de commande à l'autre, où un «objet» est une combinaison de données (appelées propriétés) et d'actions (méthodes) qui peuvent être utilisées sur les données.

Le plus dur, cependant, réside dans l'alignement des objets. Le type d'objet fourni par une applet de commande doit correspondre aux types d'objets acceptés par l'applet de commande de réception. Le texte est un type d'objet très simple, donc si vous travaillez avec du texte, l'alignement des éléments est facile. D'autres objets ne sont pas si rudimentaires.

Comment le comprendre? Bienvenue dans l' get-memberapplet de commande. Si vous souhaitez connaître le type d'objet produit par une applet de commande, dirigez-le get-member. Par exemple, si vous essayez de comprendre les processus en cours d'exécution sur votre ordinateur et que vous avez réduit les options à l' get-processapplet de commande, voici comment découvrir ce que get-processproduit l' applet de commande:

get-process | get-member

L'exécution de cette commande produit une longue liste de propriétés et de méthodes pour get-process, mais au tout début de la liste, vous pouvez voir le type d'objet qui get-process crée:

TypeName: System.Diagnostics.Process

La capture d' écran ci - dessous vous indique également que get-processdes propriétés appelées Handles, Name, NPM, PM, SI, VMet WS.

Si vous souhaitez manipuler la sortie de get-processafin de pouvoir l'utiliser (au lieu d'afficher une longue liste de processus actifs sur le moniteur), vous devez trouver une autre applet de commande qui fonctionnera avec System.Diagnostics.Processcomme entrée. Pour trouver une applet de commande consentante, utilisez simplement… attendez… PowerShell:

get-command -Parametertype System.Diagnostics.Process

Cela produit une liste de toutes les applets de commande qui peuvent gérer System.Diagnostics.Process.

Certaines applets de commande sont connues pour accepter presque tous les types d'entrée. Chef d' entre eux: where-object. Peut-être déroutant, where-objectboucle sur chaque élément envoyé dans le pipeline, un par un, et applique les critères de sélection que vous demandez. Il y a un marqueur spécial appelé $_. qui vous permet de parcourir chaque élément du tube, un à la fois.

Supposons que vous vouliez créer une liste de tous les processus en cours d'exécution sur votre machine qui sont appelés « svchost» - dans PowerShell Speak, vous voulez faire correspondre une Namepropriété de  svchost. Essayez cette commande PowerShell:

get-process | where-object {$_.Name -eq “svchost”}

La where-objectcmdlet examine chaque System.Diagnostics.Processélément, compare le .Namede cet élément à « svchost»; si l'élément correspond, il est craché au bout du tuyau et tapé sur votre moniteur. Voir la capture d'écran.