Découvrir PowerShell

PowerShell est à la fois un shell de ligne de commande et un langage de script. PowerShell a démarré sur Windows pour aider à automatiser les tâches administratives. Désormais, il s’exécute sur plusieurs plateformes et peut être utilisé pour diverses tâches.

Ce qui rend PowerShell unique est le fait qu’il accepte et retourne des objets .NET plutôt que du texte. Cette fonctionnalité facilite la connexion de différentes commandes dans un pipeline.

Pour quoi PowerShell peut-il être utilisé ?

L’usage de PowerShell est beaucoup plus répandu aujourd’hui qu’à l’époque où il était limité à Windows. Il est toujours utilisé pour l’automatisation des tâches Windows, mais peut désormais servir à des tâches telles que les suivantes :

  • Gestion de cloud. PowerShell peut être utilisé pour gérer les ressources cloud. Vous pouvez par exemple récupérer des informations sur les ressources cloud, et mettre à jour ou déployer de nouvelles ressources.
  • CI/CD. Il peut également être utilisé dans le cadre d’un pipeline d’intégration continue/déploiement continu.
  • Automatiser les tâches pour Active Directory et Exchange. Vous pouvez l’utiliser pour automatiser quasiment toutes les tâches sur Windows, par exemple créer des utilisateurs dans Active Directory et des boîtes aux lettres dans Exchange.

Il existe beaucoup d’autres domaines d’utilisation, mais la liste précédente vous donne une idée du chemin parcouru par PowerShell.

Qui utilise PowerShell ?

PowerShell est un outil puissant qui peut aider les personnes occupant une multitude de rôles. Traditionnellement, PowerShell est utilisé par le rôle d’Administrateur système, mais il est aujourd’hui utilisé par des DevOps, des Cloud Ops et même des développeurs.

Applets de commande PowerShell

PowerShell est fourni avec des centaines de commandes préinstallées. Les commandes PowerShell sont appelées cmdlets (qui se prononce command-lets) ou applets de commande.

Le nom de chaque cmdlet est constitué d’une paire verbe-nom. Par exemple : Get-Process. Cette convention de nommage permet de mieux comprendre ce que fait l’applet de commande. Elle facilite également la recherche de commande. Lorsque vous recherchez une applet de commande spécifique, vous pouvez filtrer sur le verbe ou le nom.

Utilisation des applets de commande pour explorer PowerShell

Lorsque vous débutez avec PowerShell, la courbe d’apprentissage peut paraître intimidante. PowerShell est conçu pour vous aider à apprendre de façon progressive, en fonction de vos besoins.

PowerShell comprend des applets de commande qui vous aident à vous familiariser avec lui. Grâce à ces trois cmdlets, vous pouvez découvrir les commandes disponibles, ce qu’elles font et les types sur lesquels elles opèrent.

  • Get-Verb. L’exécution de cette commande retourne la liste des verbes auxquels la plupart des commandes adhèrent. La réponse inclut une description de ce que ces verbes font. Étant donné que la plupart des commandes suivent cette convention d’affectation de noms, cela vous permet d’avoir une idée de ce que fait une commande. Ceci vous permet de sélectionner la commande appropriée et aussi de savoir comment nommer une commande si vous deviez en créer une.
  • Get-Command. Cette commande récupère une liste de toutes les commandes installées sur votre ordinateur.
  • Get-Member. Elle opère sur une sortie basée sur les objets, et peut découvrir l’objet, les propriétés et les méthodes disponibles pour une commande.
  • Get-Help. L’appel de cette commande avec le nom d’une commande en tant qu’argument affiche une page d’aide qui décrit les différentes parties d’une commande.

Grâce à ces commandes, vous pouvez découvrir presque tout ce que vous devez savoir sur PowerShell.

Verbe

Le verbe est un concept important dans PowerShell. Il s’agit d’une norme de nommage suivie par la plupart des applets de commande. Vous êtes également censé la respecter lorsque vous écrivez vos propres commandes. L’idée est que le verbe indique ce que vous essayez de faire, par exemple lire des données ou les modifier. PowerShell dispose d’une liste normalisée de verbes. Pour obtenir la liste complète de tous les verbes possibles, utilisez l’applet de commande Get-Verb :

Get-Verb

L’applet de commande retourne une longue liste de verbes. La Description fournit un contexte sur ce que le verbe est destiné à faire. Voici les premières lignes de la sortie :

Verb    AliasPrefix   Group     Description
----    -----------   -----     -----------
Add     a             Common    Adds a resource to a container, or attaches an item to another item
Clear   cl            Common    Removes all the resources from a container but does not delete the container
Close   cs            Common    Changes the state of a resource to make it inaccessible, unavailable, or unusab…
Copy    cp            Common    Copies a resource to another name or to another container
Enter   et            Common    Specifies an action that allows the user to move into a resource
Exit    ex            Common    Sets the current environment or context to the most recently used context
...

Rechercher des commandes avec Get-Command

L’applet de commande Get-Command retourne la liste de toutes les commandes installées sur votre système. La liste que vous obtenez est assez longue. Vous pouvez limiter la quantité d’informations retournées en filtrant la réponse à l’aide de paramètres ou d’applets de commande d’assistance.

Filtrer sur le nom

Vous pouvez filtrer la sortie de Get-Command à l’aide de différents paramètres. Le filtrage vous permet de rechercher des commandes qui ont certaines propriétés. Le paramètre Nom vous permet de rechercher une commande spécifique par nom.

Get-Command -Name Get-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management

Qu’en est-il si vous souhaitez rechercher toutes les commandes qui fonctionnent avec des processus ? Vous pouvez utiliser un caractère générique * pour faire correspondre d’autres formes de la chaîne. Par exemple :

Get-Command -Name *-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Debug-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Start-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Stop-Process      7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Wait-Process      7.0.0.0    Microsoft.PowerShell.Management

Filtrage sur un nom et un verbe

D’autres paramètres permettent de filtrer les valeurs de verbe et de nom. Le verbe est la partie la plus à gauche du nom d’une commande. Le verbe doit être l’une des valeurs retournées par l’applet de commande Get-Verb. La partie la plus à droite d’une commande est la partie nom. Un nom peut être n’importe quoi.

  • Filtrer sur le verbe. Dans la commande Get-Process, la partie verbe est Get. Pour filtrer la partie verbe, utilisez le paramètre Verbe.

    Get-Command -Verb 'Get'
    

    Cet exemple répertorie toutes les commandes qui utilisent le verbe Get.

  • Filtrer sur le nom. Dans la commande Get-Process, la partie nom est Process. Pour filtrer le nom, utilisez le paramètre Nom. L’exemple suivant retourne toutes les cmdlets dont les noms commencent par la lettre U.

    Get-Command -Noun U*
    

En outre, vous pouvez combiner des paramètres pour affiner votre recherche, par exemple :

Get-Command -Verb Get -Noun U*
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Get-UICulture                7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Unique                   7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Uptime                   7.0.0.0    Microsoft.PowerShell.Utility

Utiliser des applets de commande d’assistance pour filtrer les résultats

Vous pouvez également utiliser d’autres applets de commande pour filtrer les résultats.

  • Select-Object. Cette commande polyvalente vous permet de sélectionner des propriétés spécifiques d’un ou de plusieurs objets. Vous pouvez également limiter le nombre d’éléments qui vous sont retournés. L’exemple suivant retourne les valeurs de propriété Nom et Source pour les 5 premières commandes disponibles dans la session active.

    Get-Command | Select-Object -First 5 -Property Name, Source
    
    Name                      Source
    ----                      ------
    Add-AppPackage            Appx
    Add-AppPackageVolume      Appx
    Add-AppProvisionedPackage Dism
    Add-AssertionOperator     Pester
    Add-ProvisionedAppPackage Dism
    

    Pour plus d’informations, consultez Select-Object.

  • Where-Object. Cette applet de commande vous permet de filtrer les objets retournés en fonction des valeurs des propriétés. La commande prend une expression qui peut tester la valeur d’une propriété. L’exemple suivant retourne tous les processus où ProcessName commence par p.

    Get-Process | Where-Object {$_.ProcessName -like "p*"}
    

    L’applet de commande Get-Process retourne une collection d’objets de processus. Pour filtrer la réponse, dirigez la sortie vers Where-Object. Le terme diriger signifie que plusieurs commandes sont connectées par le biais d’un caractère de barre verticale |. La sortie d’une commande est envoyée comme entrée de la commande suivante. L’expression de filtre pour Where-Object utilise l’opérateur -like pour faire correspondre les processus qui commencent par la lettre p.

Explorer les objets avec Get-Member

Une fois que vous avez trouvé l’applet de commande recherchée, vous souhaitez en savoir plus sur la sortie qu’elle génère. L’applet de commande Get-Member affiche le type, les propriétés et les méthodes d’un objet. Dirigez la sortie que vous souhaitez inspecter vers Get-Member.

Get-Process | Get-Member

Le résultat affiche le type retourné en tant que TypeName et toutes les propriétés et méthodes de l’objet. Voici un extrait de ce résultat :

TypeName: System.Diagnostics.Process

Name        MemberType     Definition
----        ----------     ----------
Handles     AliasProperty  Handles = Handlecount
Name        AliasProperty  Name = ProcessName
...

À l’aide du paramètre MemberType, vous pouvez limiter les informations retournées.

Get-Process | Get-Member -MemberType Method

Par défaut, PowerShell n’affiche que quelques propriétés. L’exemple précédent affichait les membres Name, MemberType et Definition. Vous pouvez utiliser Select-Object pour spécifier les propriétés que vous souhaitez voir. Par exemple, vous ne souhaitez afficher que les propriétés Name et Definition :

Get-Process | Get-Member | Select-Object Name, Definition

Rechercher par type de paramètre

Get-Member nous a montré que Get-Process retourne des objets de type Processus. Le paramètre ParameterType de Get-Command peut être utilisé pour rechercher d’autres commandes qui prennent des objets Processus comme entrée.

Get-Command -ParameterType Process
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Debug-Process                7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Enter-PSHostProcess          7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Get-Process                  7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Get-PSHostProcessInfo        7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Stop-Process                 7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Wait-Process                 7.0.0.0    Microsoft.PowerShell.Managem…

Connaître le type de sortie d’une commande peut vous aider à affiner votre recherche de commandes associées.

Ressources supplémentaires