Qu’est-ce que PowerShell ?What is PowerShell?

PowerShell est une infrastructure multiplateforme pour la gestion de la configuration et de l’automatisation des tâches, composée d’un interpréteur de commandes (shell) de ligne de commande et d’un langage de script.PowerShell is a cross-platform task automation and configuration management framework, consisting of a command-line shell and scripting language. Contrairement à la plupart des interpréteurs de commandes qui acceptent et retournent du texte, PowerShell est construit sur le .NET Common Language Runtime (CLR), et accepte et retourne des objets .NET Framework.Unlike most shells, which accept and return text, PowerShell is built on top of the .NET Common Language Runtime (CLR), and accepts and returns .NET objects. Ce changement fondamental apporte de nouveaux outils et méthodes pour l’automatisation.This fundamental change brings entirely new tools and methods for automation.

La sortie est basée sur les objetsOutput is object-based

Contrairement aux interfaces de ligne de commande traditionnelles, les applets de commande PowerShell sont conçues pour traiter des objets.Unlike traditional command-line interfaces, PowerShell cmdlets are designed to deal with objects. Un objet est une information structurée qui va au-delà de la seule chaîne de caractères s’affichant à l’écran.An object is structured information that is more than just the string of characters appearing on the screen. Une sortie de commande comporte toujours des informations supplémentaires que vous pouvez utiliser si nécessaire.Command output always carries extra information that you can use if you need it.

Si vous avez utilisé des outils de traitement de texte pour traiter des données dans le passé, vous constaterez qu’ils se comportent différemment lorsqu’ils sont utilisés dans PowerShell.If you've used text-processing tools to process data in the past, you'll find that they behave differently when used in PowerShell. Dans la plupart des cas, vous n’avez pas besoin d’outils de traitement texte pour extraire des informations spécifiques.In most cases, you don't need text-processing tools to extract specific information. Vous accédez directement à des portions de données à l’aide de la syntaxe d’objet PowerShell standard.You directly access portions of the data using standard PowerShell object syntax.

La famille de commandes est extensibleThe command family is extensible

Les interfaces comme cmd.exe n’offrent aucun moyen d’étendre directement le jeu de commandes intégré.Interfaces such as cmd.exe don't provide a way for you to directly extend the built-in command set. Vous pouvez créer des outils en ligne de commande externes qui s’exécutent dans cmd.exe.You can create external command-line tools that run in cmd.exe. Mais ces outils externes ne proposent pas de services comme l’intégration de l’aide.But these external tools don't have services, such as Help integration. cmd.exe ne sait pas automatiquement que ces outils externes sont des commandes valides.cmd.exe doesn't automatically know that these external tools are valid commands.

Dans PowerShell, les commandes sont appelées des cmdlets .The commands in PowerShell are known as cmdlets . Vous pouvez utiliser chaque cmdlet séparément, mais leur puissance s’exprime pleinement quand vous les combinez pour effectuer des tâches complexes.You can use each cmdlet separately, but their power is realized when you combine them to perform complex tasks. Comme de nombreux interpréteurs de commandes, PowerShell permet d’accéder au système de fichiers sur l’ordinateur.Like many shells, PowerShell gives you access to the file system on the computer. Les fournisseurs PowerShell permettent d’accéder à d’autres magasins de données, tels que le Registre et les magasins de certificats, aussi facilement qu’au système de fichiers.PowerShell providers enable you to access other data stores, such as the registry and the certificate stores, as easily as you access the file system.

Vous pouvez créer vos propres modules de fonction et de cmdlet à l’aide de code ou de scripts compilés.You can create your own cmdlet and function modules using compiled code or scripts. Les modules peuvent ajouter des cmdlets et des fournisseurs à l’interpréteur de commandes.Modules can add cmdlets and providers to the shell. PowerShell prend également en charge des scripts analogues à ceux de l’interpréteur de commande UNIX et aux fichiers de traitement cmd.exe.PowerShell also supports scripts that are analogous to UNIX shell scripts and cmd.exe batch files.

Prise en charge des alias de commandeSupport for command aliases

PowerShell prend en charge les alias pour faire référence aux commandes avec d’autres noms.PowerShell supports aliases to refer to commands by alternate names. Les alias permettent aux utilisateurs ayant l’expérience d’autres interpréteurs de commande d’utiliser des noms de commandes courants qu’ils connaissent déjà pour des opérations similaires dans PowerShell.Aliasing allows users with experience in other shells to use common command names that they already know for similar operations in PowerShell.

Créer un alias associe un nouveau nom à une autre commande.Aliasing associates a new name with another command. Par exemple, PowerShell dispose d’une fonction interne nommée Clear-Host qui efface la fenêtre de sortie.For example, PowerShell has an internal function named Clear-Host that clears the output window. Vous pouvez taper l’alias cls ou clear dans une invite de commandes.You can type either the cls or clear alias at a command prompt. PowerShell interprète ces alias et exécute la fonction Clear-Host.PowerShell interprets these aliases and runs the Clear-Host function.

Cette fonctionnalité aide les utilisateurs à apprendre à utiliser PowerShell.This feature helps users to learn PowerShell. Tout d’abord, la plupart des utilisateurs de cmd.exe et d’Unix ont un répertoire de commandes qu’ils connaissent déjà par leur nom.First, most cmd.exe and Unix users have a large repertoire of commands that users already know by name. Les équivalents PowerShell ne donneront peut-être pas des résultats identiques.The PowerShell equivalents may not produce identical results. Toutefois, les résultats sont assez proches pour que les utilisateurs puissent travailler sans connaître le nom de la commande PowerShell.However, the results are close enough that users can do work without knowing the PowerShell command name. La « mémoire musculaire » est une autre source principale de frustration lors de l’apprentissage d’un nouvel interpréteur de commande."Muscle memory" is another major source of frustration when learning a new command shell. Si vous avez utilisé cmd.exe pendant des années, vous risquez de taper instinctivement la commande cls pour effacer l’écran.If you have used cmd.exe for years, you might reflexively type the cls command to clear the screen. Sans l’alias de Clear-Host, vous recevez un message d’erreur et ne savez pas quoi faire pour effacer la sortie.Without the alias for Clear-Host, you receive an error message and won't know what to do to clear the output.

PowerShell gère l’entrée et l’affichage sur la consolePowerShell handles console input and display

Lorsque vous tapez une commande, PowerShell traite toujours directement la saisie de la ligne de commande.When you type a command, PowerShell always processes the command-line input directly. PowerShell met également en forme la sortie sur écran.PowerShell also formats the output that you see on the screen. Cette différence est importante, car elle réduit le travail requis de chaque cmdlet.This difference is significant because it reduces the work required of each cmdlet. Elle garantit que vous pouvez toujours procéder de la même façon avec chaque cmdlet.It ensures that you can always do things the same way with any cmdlet. Les développeurs de cmdlet n’ont besoin ni d’écrire du code pour analyser les arguments de ligne de commande, ni de mettre en forme la sortie.Cmdlet developers don't need to write code to parse the command-line arguments or format the output.

Les outils en ligne de commande traditionnels ont leurs propres modes de demande et d’affichage de l’aide.Traditional command-line tools have their own schemes for requesting and displaying Help. Certains outils en ligne de commande utilisent /? pour lancer l’affichage de l’aide. D’autres utilisent -?, /H, voire //.Some command-line tools use /? to trigger the Help display; others use -?, /H, or even //. Certains affichent l’aide dans une fenêtre d’interface graphique utilisateur, plutôt que dans l’affichage de la console.Some will display Help in a GUI window, rather than in the console display. Si vous utilisez un paramètre incorrect, l’outil peut ignorer ce que vous avez tapé et commencer à exécuter une tâche automatiquement.If you use the wrong parameter, the tool might ignore what you typed and begin executing a task automatically. Étant donné que PowerShell analyse et traite automatiquement la ligne de commande, le paramètre -? signifie toujours « afficher l’aide de cette commande ».Since PowerShell automatically parses and processes the command line, the -? parameter always means "show me Help for this command".

Notes

Si vous exécutez une application graphique dans PowerShell, la fenêtre de l’application s’ouvre.If you run a graphic application in PowerShell, the window for the application opens. PowerShell intervient uniquement lors du traitement de l’entrée de ligne de commande que vous saisissez ou lors du renvoi de la sortie de l’application à la fenêtre de la console.PowerShell intervenes only when processing the command-line input you supply or the application output returned to the console window. Cela n’affecte en rien le fonctionnement interne de l’application.It does not affect how the application works internally.

PowerShell a un pipelinePowerShell has a pipeline

Les pipelines constituent indubitablement le concept plus important utilisé dans les interfaces de ligne de commande.Pipelines are arguably the most valuable concept used in command-line interfaces. Lorsqu’ils sont utilisés correctement, les pipelines réduisent l’effort lié à l’utilisation de commandes complexes et facilitent la visualisation du flux de travail.When used properly, pipelines reduce the effort of using complex commands and make it easier to see the flow of work. Chaque commande dans un pipeline passe sa sortie, élément par élément, à la commande suivante.Each command in a pipeline passes its output, item by item, to the next command. Les commandes n’ont pas à gérer plusieurs éléments à la fois.Commands don't have to handle more than one item at a time. Il en résulte une consommation réduite des ressources et la possibilité de recevoir la sortie immédiatement.The result is reduced resource consumption and the ability to get output immediately.

La notation utilisée pour les pipelines est similaire celle utilisée dans d’autres interpréteurs de commandes.The notation used for pipelines is similar to the notation used in other shells. À première vue, les différences des pipelines dans PowerShell peuvent ne pas être évidentes.At first glance, it may not be apparent how pipelines are different in PowerShell. Même si vous voyez du texte à l’écran, PowerShell canalise des objets, pas du texte, entre les commandes.Although you see text on the screen, PowerShell pipes objects, not text, between commands.

Par exemple, si vous utilisez la cmdlet Out-Host pour forcer un affichage page par page de la sortie d’une autre commande, la sortie ressemble exactement au texte normal affiché à l’écran, mais divisé en pages :For example, if you use the Out-Host cmdlet to force a page-by-page display of output from another command, the output looks just like the normal text displayed on the screen, broken up into pages:

Get-ChildItem | Out-Host -Paging
    Directory: /mnt/c/Git/PS-Docs/PowerShell-Docs/reference/7.0/Microsoft.PowerShell.Core

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          05/22/2020    08:30                About
-----          05/20/2020    14:36           9044 Add-History.md
-----          05/20/2020    14:36          12227 Clear-History.md
-----          05/20/2020    14:36           3566 Clear-Host.md
-----          05/20/2020    14:36          29087 Connect-PSSession.md
-----          05/20/2020    14:36           5705 Debug-Job.md
-----          05/20/2020    14:36           3515 Disable-ExperimentalFeature.md
-----          05/20/2020    14:36          25531 Disable-PSRemoting.md
-----          05/20/2020    14:36           7852 Disable-PSSessionConfiguration.md
-----          05/20/2020    14:36          25355 Disconnect-PSSession.md
-----          05/20/2020    14:36           3491 Enable-ExperimentalFeature.md
-----          05/20/2020    14:36          13310 Enable-PSRemoting.md
-----          05/20/2020    14:36           8401 Enable-PSSessionConfiguration.md
-----          05/20/2020    14:36           9531 Enter-PSHostProcess.md
...
<SPACE> next page; <CR> next line; Q quit

La pagination réduit également l’utilisation du processeur, car le traitement transfère à la cmdlet Out-Host lorsqu’il a une page complète prête à afficher.Paging also reduces CPU utilization because processing transfers to the Out-Host cmdlet when it has a complete page ready to display. L’exécution des cmdlets qui la précèdent dans le pipeline est interrompue jusqu’à ce que la page suivante de la sortie soit disponible.The cmdlets that precede it in the pipeline pause execution until the next page of output is available.

Objets dans le pipelineObjects in the pipeline

Lorsque vous exécutez une cmdlet dans PowerShell, vous voyez une sortie texte, car il est de nécessaire de représenter les objets sous forme de texte dans une fenêtre de console.When you run a cmdlet in PowerShell, you see text output because it is necessary to represent objects as text in a console window. La sortie texte peut ne pas afficher toutes les propriétés de l’objet en cours de sortie.The text output may not display all of the properties of the object being output.

Prenez, par exemple, la cmdlet Get-Location.For example, consider the Get-Location cmdlet. La sortie texte est un résumé des informations, non une représentation complète de l’objet retourné par Get-Location.The text output is a summary of information, not a complete representation of the object returned by Get-Location. Le titre dans la sortie est ajouté par le processus qui met en forme les données pour l’affichage à l’écran.The heading in the output is added by the process that formats the data for onscreen display.

Get-Location
Path
----
C:\

Lorsque vous dirigez la sortie vers la cmdlet Get-Member, vous obtenez des informations sur l’objet retourné par Get-Location.Piping the output to the Get-Member cmdlet displays information about the object returned by Get-Location.

Get-Location | Get-Member
   TypeName: System.Management.Automation.PathInfo

Name         MemberType Definition
----         ---------- ----------
Equals       Method     bool Equals(System.Object obj)
GetHashCode  Method     int GetHashCode()
GetType      Method     type GetType()
ToString     Method     string ToString()
Drive        Property   System.Management.Automation.PSDriveInfo Drive {get;}
Path         Property   string Path {get;}
Provider     Property   System.Management.Automation.ProviderInfo Provider {get;}
ProviderPath Property   string ProviderPath {get;}

Get-Location retourne un objet PathInfo qui contient le chemin d’accès actuel et d’autres informations.Get-Location returns a PathInfo object that contains the current path and other information.

Système d’aide intégréBuilt-in help system

À l’instar des pages man Unix, PowerShell inclut des articles d’aide détaillés qui expliquent les concepts et la syntaxe de commande de PowerShell.Similar to Unix man pages, PowerShell includes detailed help articles that explain PowerShell concepts and command syntax. Utilisez la cmdlet Get-Help pour afficher ces articles à l’invite de commandes ou affichez les versions les plus récemment mises à jour de ces articles dans la documentation PowerShell en ligne.Use the Get-Help cmdlet to display these articles at the command prompt or view the most recently updated versions of these articles in the PowerShell documentation online.

Étapes suivantesNext steps

Pour en savoir plus sur PowerShell, consultez la section Découvrir PowerShell de ce site.To learn more about PowerShell, see the Learning PowerShell section of this site.