PowerShell - PowerShell

PowerShell
PowerShell Core 6.0 icon.png
PowerShell Core 7.1.5 avec Windows Terminal.png
Capture d'écran d'une session PowerShell Core dans Windows Terminal
Paradigme Impératif , pipeline , orienté objet , fonctionnel et réflexif
Conçu par Jeffrey Snov , Bruce Payette, James Truher (et al.)
Développeur Microsoft
Première apparition 14 novembre 2006 ; il y a 14 ans ( 2006-11-14 )
Version stable
7.1.5 / 14 octobre 2021 ; il y a 4 jours ( 2021-10-14 )
Version préliminaire
v7.2.0-preview.10 / 28 septembre 2021 ; il y a 20 jours ( 2021-09-28 )
Discipline de frappe Fort , sûr , implicite et dynamique
Langage d'implémentation C#
Plate-forme .NET Framework , .NET Core
Système d'exploitation
Licence Licence MIT (mais le composant Windows reste propriétaire )
Extensions de nom de fichier
Site Internet microsoft .com / Powershell
Influencé par
Python , Ksh , Perl , C# , CL , DCL , SQL , Tcl , Tk , Chef , Puppet

PowerShell est un programme d'automatisation des tâches et de gestion de configuration de Microsoft , composé d'un shell de ligne de commande et du langage de script associé . Initialement un composant Windows uniquement, connu sous le nom de Windows PowerShell , il est devenu open source et multiplateforme le 18 août 2016 avec l'introduction de PowerShell Core . Le premier est construit sur le .NET Framework , le second sur .NET Core .

Dans PowerShell, les tâches administratives sont généralement effectuées par des applets de commande (prononcer command-lets ), qui sont des classes .NET spécialisées implémentant une opération particulière. Ceux-ci fonctionnent en accédant aux données dans différents magasins de données, comme le système de fichiers ou le registre , qui sont mis à la disposition de PowerShell via des fournisseurs . Les développeurs tiers peuvent ajouter des applets de commande et des fournisseurs à PowerShell. Les applets de commande peuvent être utilisées par des scripts, qui peuvent à leur tour être regroupés dans des modules.

PowerShell fournit un accès à COM et WMI , permettant aux administrateurs d'effectuer des tâches administratives sur les systèmes Windows locaux et distants ainsi que WS-Management et CIM permettant la gestion des systèmes Linux distants et des périphériques réseau. PowerShell fournit également une API d' hébergement avec laquelle le runtime PowerShell peut être intégré dans d'autres applications. Ces applications peuvent ensuite utiliser les fonctionnalités de PowerShell pour implémenter certaines opérations, notamment celles exposées via l' interface graphique . Cette capacité a été utilisée par Microsoft Exchange Server 2007 pour exposer sa fonctionnalité de gestion en tant que cmdlets et fournisseurs PowerShell et implémenter les outils de gestion graphique en tant qu'hôtes PowerShell qui appellent les cmdlets nécessaires. D'autres applications Microsoft, notamment Microsoft SQL Server 2008, exposent également leur interface de gestion via des applets de commande PowerShell.

PowerShell inclut sa propre aide complète basée sur la console (similaire aux pages de manuel dans les shells Unix ) accessible via l' Get-Helpapplet de commande. Le contenu de l'aide locale mis à jour peut être récupéré sur Internet via l' Update-Helpapplet de commande. Alternativement, l'aide du Web peut être obtenue au cas par cas via le -onlinepassage à Get-Help.

Fond

Fond

Chaque version de Microsoft Windows pour ordinateurs personnels a inclus un interpréteur de ligne de commande (CLI) pour gérer le système d'exploitation. Son prédécesseur, MS-DOS , reposait exclusivement sur une CLI. Il s'agit COMMAND.COMde MS-DOS et Windows 9x , ainsi que cmd.exede la famille de systèmes d'exploitation Windows NT . Les deux prennent en charge quelques commandes internes de base. À d'autres fins, une application console distincte doit être écrite. Ils incluent également un langage de script de base ( fichiers batch ), qui peut être utilisé pour automatiser diverses tâches. Cependant, ils ne peuvent pas être utilisés pour automatiser toutes les facettes de la fonctionnalité de l' interface utilisateur graphique (GUI), en partie parce que les équivalents en ligne de commande des opérations sont limités et que le langage de script est élémentaire. Dans Windows Server 2003 , la situation s'est améliorée, mais la prise en charge des scripts n'était toujours pas satisfaisante.

Microsoft a tenté de remédier à certaines de ces lacunes en introduisant Windows Script Host en 1998 avec Windows 98 et son hôte basé sur la ligne de commande, cscript.exe. Il s'intègre au moteur Active Script et permet d'écrire des scripts dans des langages compatibles, tels que JScript et VBScript , en tirant parti des API exposées par les applications via le modèle objet composant ( COM ). Cependant, il a ses propres lacunes : sa documentation n'est pas très accessible, et il s'est rapidement imposé comme un vecteur de vulnérabilité du système après que plusieurs virus informatiques très médiatisés aient exploité les faiblesses de ses dispositions de sécurité. Différentes versions de Windows ont fourni divers interpréteurs de ligne de commande à usage spécial (tels que netsh et WMIC ) avec leurs propres jeux de commandes, mais ils n'étaient pas interopérables.

Kermit

À la fin des années 1990, Intel s'est adressé à Microsoft pour demander de l'aide pour faire de Windows, qui fonctionnait sur des processeurs Intel, une plate-forme plus appropriée pour prendre en charge le développement des futurs processeurs Intel. À l'époque, le développement du processeur Intel était réalisé sur des ordinateurs Sun Microsystems qui exécutaient Solaris (une variante Unix ) sur des processeurs à architecture RISC . La possibilité d'exécuter les nombreux scripts d'automatisation KornShell d' Intel sur Windows a été identifiée comme une capacité clé. En interne, Microsoft a commencé à créer un port Windows de Korn Shell, qui portait le nom de code Kermitwiki. Intel a finalement pivoté vers une plate-forme de développement basée sur Linux qui pourrait fonctionner sur des processeurs Intel, rendant le projet Kermit redondant. Cependant, avec une équipe entièrement financée, le directeur de programme Microsoft Jeffrey Snover s'est rendu compte qu'il y avait une opportunité de créer une solution plus générale au problème d'automatisation administrative de Microsoft.


Monade

En 2002, Microsoft avait commencé à développer une nouvelle approche de la gestion de la ligne de commande, y compris une CLI appelée Monad (également connue sous le nom de Microsoft Shell ou MSH). Les idées sous-jacentes ont été publiées en août 2002 dans un livre blanc intitulé "Monad Manifesto" par son architecte en chef, Jeffrey Snover . Dans une interview de 2017, Snov explique la genèse de PowerShell, affirmant qu'il avait essayé de rendre les outils Unix disponibles sur Windows, ce qui n'a pas fonctionné en raison de « différences architecturales fondamentales entre Windows et Linux ». Plus précisément, il a noté que Linux considère tout comme un fichier texte ASCII , alors que Windows considère tout comme une « API qui renvoie des données structurées ». Ils étaient fondamentalement incompatibles, ce qui l'a amené à adopter une approche différente.

Monad devait être une nouvelle CLI extensible avec une nouvelle conception capable d'automatiser une gamme de tâches administratives de base. Microsoft a présenté Monad pour la première fois publiquement lors de la Professional Development Conference à Los Angeles en octobre 2003. Quelques mois plus tard, ils ont ouvert une version bêta privée, qui a finalement conduit à une version bêta publique. Microsoft a publié la première version bêta publique de Monad le 17 juin 2005, la bêta 2 le 11 septembre 2005, et la bêta 3 le 10 janvier 2006.

PowerShell

Le 25 avril 2006, peu de temps après l'annonce initiale de Monad, Microsoft a annoncé que Monad avait été renommé Windows PowerShell , le positionnant comme une partie importante de ses offres de technologie de gestion. Release Candidate (RC) 1 de PowerShell a été publié en même temps. Un aspect important du changement de nom et de la RC était qu'il s'agissait désormais d'un composant de Windows, plutôt que d'un simple module complémentaire.

La version Release Candidate 2 de PowerShell version 1 a été publiée le 26 septembre 2006, avec une version finale sur le Web le 14 novembre 2006. PowerShell pour les versions antérieures de Windows a été publié le 30 janvier 2007. Le développement de PowerShell v2.0 a commencé avant la sortie de PowerShell v1.0 . Au cours du développement, Microsoft a fourni trois aperçus technologiques communautaires (CTP) . Microsoft a mis ces versions à la disposition du public. La dernière version CTP de Windows PowerShell v2.0 a été mise à disposition en décembre 2008.

PowerShell pour Linux 6.0 Alpha 9 sur Ubuntu 14.04 x64

PowerShell v2.0 a été achevé et mis en production en août 2009, en tant que partie intégrante de Windows 7 et Windows Server 2008 R2. Les versions de PowerShell pour Windows XP, Windows Server 2003, Windows Vista et Windows Server 2008 ont été publiées en octobre 2009 et sont disponibles au téléchargement pour les plates-formes 32 bits et 64 bits. Dans un numéro d'octobre 2009 de TechNet Magazine , Microsoft a qualifié la maîtrise de PowerShell de « la compétence la plus importante dont un administrateur Windows aura besoin dans les années à venir ».

Windows 10 a livré un framework de test pour PowerShell.

Le 18 août 2016, Microsoft a annoncé avoir rendu PowerShell open source et multiplateforme avec prise en charge de Windows, macOS , CentOS et Ubuntu . Le code source a été publié sur GitHub . Le passage à l'open source a créé une deuxième incarnation de PowerShell appelée « PowerShell Core », qui s'exécute sur .NET Core . Il est différent de "Windows PowerShell", qui s'exécute sur le .NET Framework complet . À partir de la version 5.1, PowerShell Core est fourni avec Windows Server 2016 Nano Server .

Concevoir

Une tactique de conception clé pour PowerShell consistait à tirer parti du grand nombre d' API qui existaient déjà dans Windows, Windows Management Instrumentation, .NET Framework et d'autres logiciels. Les applets de commande PowerShell « enveloppent » les fonctionnalités existantes. Le but de cette tactique est de fournir une interface conviviale et plus cohérente entre les administrateurs et un large éventail de fonctionnalités sous-jacentes. Avec PowerShell, un administrateur n'a pas besoin de connaître le codage .NET, WMI ou API de bas niveau, et peut à la place se concentrer sur l'utilisation des applets de commande exposées par PowerShell. À cet égard, PowerShell crée peu de nouvelles fonctionnalités, se concentrant plutôt sur l'accessibilité des fonctionnalités existantes à un public particulier.

Grammaire

Les développeurs de PowerShell ont basé la grammaire de base de l'outil sur celle du POSIX 1003.2 KornShell .

Cependant, le langage de PowerShell a également été influencé par PHP , Perl et de nombreux autres langages existants.

Commandes nommées

Windows PowerShell peut exécuter quatre types de commandes nommées :

  • applets de commande ( programmes .NET Framework conçus pour interagir avec PowerShell)
  • Scripts PowerShell (fichiers suffixés par .ps1)
  • Fonctions PowerShell
  • Programmes exécutables autonomes

Si une commande est un programme exécutable autonome, PowerShell la lance dans un processus distinct ; s'il s'agit d'une applet de commande, elle s'exécute dans le processus PowerShell. PowerShell fournit une interface de ligne de commande interactive , où les commandes peuvent être saisies et leur sortie affichée. L'interface utilisateur offre la possibilité de compléter des onglets personnalisables . PowerShell permet la création d' alias pour les applets de commande, que PowerShell traduit textuellement en invocations des commandes d'origine. PowerShell prend en charge les paramètres nommés et positionnels pour les commandes. Lors de l'exécution d'une applet de commande, le travail de liaison de la valeur de l'argument au paramètre est effectué par PowerShell lui-même, mais pour les exécutables externes, les arguments sont analysés par l'exécutable externe indépendamment de l'interprétation de PowerShell.

Système de type étendu

Le PowerShell Extended Type System ( ETS ) est basé sur le système de types .NET, mais avec une sémantique étendue (par exemple, propertySets et extensibilité tierce). Par exemple, il permet la création de différentes vues d'objets en exposant uniquement un sous-ensemble des champs de données, des propriétés et des méthodes, ainsi qu'en spécifiant un formatage et un comportement de tri personnalisés. Ces vues sont mappées à l'objet d'origine à l'aide de fichiers de configuration XML .

Applets de commande

Les applets de commande sont des commandes spécialisées dans l'environnement PowerShell qui implémentent des fonctions spécifiques. Ce sont les commandes natives de la pile PowerShell. Les applets de commande suivent un modèle de nommage Verb - Noun , tel que Get-ChildItem , ce qui en fait un code auto-documenté . Les applets de commande génèrent leurs résultats sous forme d'objets et peuvent également recevoir des objets en entrée, ce qui les rend adaptés à une utilisation en tant que destinataires dans un pipeline. Si une applet de commande génère plusieurs objets, chaque objet de la collection est transmis dans l'ensemble du pipeline avant que l'objet suivant ne soit traité.

Les applets de commande sont des classes .NET spécialisées , que le runtime PowerShell instancie et appelle au moment de l'exécution . Les applets de commande dérivent de Cmdletou de PSCmdlet, ce dernier étant utilisé lorsque l'applet de commande doit interagir avec le runtime PowerShell. Ces classes de base précisent certaines méthodes - BeginProcessing(), ProcessRecord()et EndProcessing()- qui les remplacements de mise en œuvre de l'applet de commande pour fournir la fonctionnalité. Chaque fois qu'une applet de commande s'exécute, PowerShell appelle ces méthodes dans l'ordre, en ProcessRecord()étant appelée si elle reçoit une entrée de pipeline. Si une collection d'objets est redirigée, la méthode est invoquée pour chaque objet de la collection. La classe implémentant l'applet de commande doit avoir un attribut .NET – CmdletAttribute– qui spécifie le verbe et le nom qui composent le nom de l'applet de commande. Les verbes courants sont fournis sous forme d' énumération .

Si une applet de commande reçoit une entrée de pipeline ou une entrée de paramètre de ligne de commande, il doit y avoir une propriété correspondante dans la classe, avec une implémentation de mutateur . PowerShell appelle le mutateur avec la valeur de paramètre ou l'entrée de pipeline, qui est enregistrée par l'implémentation du mutateur dans les variables de classe. Ces valeurs sont ensuite référencées par les méthodes qui implémentent la fonctionnalité. Les propriétés qui correspondent aux paramètres de ligne de commande sont marquées par ParameterAttributeet sont définies avant l'appel à BeginProcessing(). Ceux qui correspondent à l'entrée du pipeline sont également flanqués de ParameterAttribute, mais avec le ValueFromPipelinejeu de paramètres d'attribut.

L'implémentation de ces classes d'applet de commande peut faire référence à n'importe quelle API .NET et peut être dans n'importe quel langage .NET . En outre, PowerShell met à disposition certaines API, telles que , qui sont utilisées pour accéder à des fonctionnalités spécifiques à PowerShell, telles que l'écriture d'objets résultants dans le pipeline. Les applets de commande peuvent utiliser directement les API d' accès aux données .NET ou utiliser l'infrastructure PowerShell des fournisseurs PowerShell , ce qui rend les magasins de données adressables à l'aide de chemins uniques . Les magasins de données sont exposés à l'aide de lettres de lecteur et de hiérarchies en leur sein, adressées en tant que répertoires. Windows PowerShell est fourni avec des fournisseurs pour le système de fichiers , le registre , le magasin de certificats , ainsi que les espaces de noms pour les alias de commande, les variables et les fonctions. Windows PowerShell inclut également diverses applets de commande pour gérer divers systèmes Windows , y compris le système de fichiers , ou utiliser Windows Management Instrumentation pour contrôler les composants Windows . D'autres applications peuvent enregistrer des applets de commande auprès de PowerShell, ce qui lui permet de les gérer et, si elles contiennent une banque de données (telle qu'une base de données), elles peuvent également ajouter des fournisseurs spécifiques. WriteObject()

Le nombre d'applets de commande inclus dans l'installation de base de PowerShell a généralement augmenté avec chaque version :

Version Applets de commande
Windows PowerShell 1.0 129
Windows PowerShell 2.0 632
Windows PowerShell 3.0 environ 1 000
Windows PowerShell 4.0 ?
Windows PowerShell 5.0 environ 1 300
Windows PowerShell 5.1 1586
PowerShell Core 6.0 ?
PowerShell Core 6.1 ?
PowerShell Core 6.2 ?
PowerShell 7.0 1507
PowerShell 7.1 ?

Les applets de commande peuvent être ajoutées au shell via des composants logiciels enfichables (obsolètes dans la v2) et des modules ; les utilisateurs ne sont pas limités aux applets de commande incluses dans l'installation de base de PowerShell.

Pipeline

PowerShell implémente le concept de pipeline , qui permet de rediriger la sortie d'une applet de commande vers une autre applet de commande en tant qu'entrée. Par exemple, la sortie de l' Get-Processapplet de commande peut être redirigée vers le Where-Objectpour filtrer tout processus ayant moins de 1 Mo de mémoire paginée , puis vers l' Sort-Objectapplet de commande (par exemple, pour trier les objets par nombre de descripteurs), puis enfin vers l' Select-Objectapplet de commande pour sélectionner uniquement les dix premiers processus en fonction du nombre de poignées.

Comme avec les pipelines Unix , les pipelines PowerShell peuvent construire des commandes complexes, en utilisant l' |opérateur pour connecter les étapes. Cependant, le pipeline PowerShell diffère des pipelines Unix en ce que les étapes s'exécutent dans le runtime PowerShell plutôt que comme un ensemble de processus coordonnés par le système d'exploitation . De plus, les objets .NET structurés, plutôt que les flux d'octets , sont passés d'une étape à l'autre. L'utilisation d' objets et d'étapes d'exécution dans le runtime PowerShell élimine le besoin de sérialiser les structures de données ou de les extraire en analysant explicitement la sortie de texte. Un objet peut également encapsuler certaines fonctions qui fonctionnent sur les données contenues, qui deviennent disponibles pour la commande destinataire pour une utilisation. Pour la dernière applet de commande d'un pipeline, PowerShell dirige automatiquement son objet de sortie vers l' Out-Defaultapplet de commande, qui transforme les objets en un flux d'objets de format, puis les affiche à l'écran.

Étant donné que tous les objets PowerShell sont des objets .NET, ils partagent une .ToString()méthode qui récupère la représentation textuelle des données dans un objet. De plus, PowerShell permet de spécifier des définitions de mise en forme, de sorte que la représentation textuelle des objets peut être personnalisée en choisissant les éléments de données à afficher et de quelle manière. Cependant, afin de maintenir la compatibilité descendante , si un exécutable externe est utilisé dans un pipeline, il reçoit un flux de texte représentant l'objet, au lieu de s'intégrer directement au système de type PowerShell.

Script

Windows PowerShell inclut un langage de script typé dynamiquement qui peut implémenter impérativement des opérations complexes à l'aide d'applets de commande . Le langage de script prend en charge les variables, les fonctions, les branchements ( if-then-else), les boucles ( while, do, for, et foreach), la gestion structurée des erreurs/exceptions et les fermetures / expressions lambda , ainsi que l'intégration avec .NET. Les variables dans les scripts PowerShell sont préfixées par $. Les variables peuvent se voir attribuer n'importe quelle valeur, y compris la sortie des applets de commande. Les chaînes peuvent être entourées de guillemets simples ou de guillemets doubles : lors de l'utilisation de guillemets doubles, les variables seront développées même si elles sont à l'intérieur des guillemets. Mettre le chemin d'accès à un fichier entre accolades précédées d'un signe dollar (comme dans ${C:\foo.txt}) crée une référence au contenu du fichier. S'il est utilisé comme valeur L , tout ce qui lui est attribué sera écrit dans le fichier. Lorsqu'il est utilisé comme valeur R , le contenu du fichier sera lu. Si un objet est affecté, il est sérialisé avant d'être stocké.

Les membres d'objets sont accessibles à l'aide de la .notation, comme dans la syntaxe C#. PowerShell fournit des variables spéciales, telles que $args, qui est un tableau de tous les arguments de ligne de commande transmis à une fonction à partir de la ligne de commande, et $_, qui fait référence à l'objet actuel dans le pipeline. PowerShell fournit également des tableaux et des tableaux associatifs . Le langage de script PowerShell évalue également immédiatement les expressions arithmétiques saisies sur la ligne de commande et analyse les abréviations courantes, telles que Go, Mo et Ko.

À l'aide du functionmot - clé, PowerShell permet la création de fonctions. Une fonction simple a l'aspect général suivant :

function name ([Type]$Param1, [Type]$Param2)
{
  # Instructions
}

Cependant, PowerShell permet des fonctions avancées qui prennent en charge les paramètres nommés, les paramètres de position, les paramètres de commutation et les paramètres dynamiques.

function Verb-Noun
{
  param (
    # Definition of static parameters
  )
  dynamicparam {
    # Definition of dynamic parameters
  }
  begin {
    # Set of instruction to run at the start of the pipeline
  }
  process {
    # Main instruction sets, ran for each item in the pipeline
  }
  end {
    # Set of instruction to run at the end of the pipeline
  }
}

La fonction définie est appelée sous l'une des formes suivantes :

name value1 value2
Verb-Noun -Param1 value1 -Param2 value2

PowerShell permet à toutes les méthodes .NET statiques d'être appelées en fournissant leurs espaces de noms entre crochets ( []), puis en utilisant une paire de deux points ( ::) pour indiquer la méthode statique. Par exemple:

[Console]::WriteLine("PowerShell")

Il existe des dizaines de façons de créer des objets dans PowerShell. Une fois créé, on peut accéder aux propriétés et aux méthodes d'instance d'un objet en utilisant la .notation.

PowerShell accepte les chaînes , à la fois brutes et échappées . Une chaîne entre guillemets simples est une chaîne brute tandis qu'une chaîne entre guillemets doubles est une chaîne d'échappement. PowerShell traite les guillemets droits et bouclés comme des équivalents.

La liste suivante de caractères spéciaux est prise en charge par PowerShell :

Caractères spéciaux PowerShell
Séquence Sens
`0 Nul
`un Alerte
`b Retour arrière
`e Échapper
`f Flux de formulaire
`n Nouvelle ligne
`r Retour chariot
`t Onglet horizontal
`u{x} Séquence d'échappement Unicode
`v Onglet vertical
--% Traitez n'importe quel personnage à partir de ce point littéralement

Pour la gestion des erreurs, PowerShell fournit un mécanisme de gestion des exceptions basé sur .NET . En cas d'erreurs, des objets contenant des informations sur l'erreur ( Exceptionobjet ) sont renvoyés, qui sont interceptés à l'aide de la try ... catchconstruction (bien qu'une trapconstruction soit également prise en charge). PowerShell peut être configuré pour reprendre l'exécution en silence, sans réellement lever l'exception ; cela peut être fait soit sur une seule commande, une seule session ou perpétuellement.

Les scripts écrits à l'aide de PowerShell peuvent être conservés d'une session à l'autre dans un .ps1fichier ou un .psm1fichier (ce dernier est utilisé pour implémenter un module). Plus tard, le script entier ou des fonctions individuelles dans le script peuvent être utilisés. Les scripts et les fonctions fonctionnent de manière analogue aux applets de commande, en ce sens qu'ils peuvent être utilisés comme commandes dans les pipelines et que des paramètres peuvent leur être liés. Les objets du pipeline peuvent être transmis de manière transparente entre les fonctions, les scripts et les applets de commande. Pour empêcher l'exécution involontaire de scripts, l'exécution de scripts est désactivée par défaut et doit être activée explicitement. L'activation des scripts peut être effectuée au niveau du système, de l'utilisateur ou de la session. Les scripts PowerShell peuvent être signés pour vérifier leur intégrité et sont soumis à Code Access Security .

Le langage de script PowerShell prend en charge la notation de préfixe binaire similaire à la notation scientifique prise en charge par de nombreux langages de programmation de la famille C.

Hébergement

On peut également utiliser PowerShell intégré dans une application de gestion, qui utilise le runtime PowerShell pour implémenter la fonctionnalité de gestion. Pour cela, PowerShell fournit une API d' hébergement géré . Via les API, l'application peut instancier un runspace (une instanciation du runtime PowerShell), qui s'exécute dans le processus de l'application et est exposé en tant qu'objet. L'état de l'espace d'exécution est encapsulé dans un objet. Lorsque l'espace d'exécution est créé, le runtime Windows PowerShell initialise l'instanciation, notamment en initialisant les fournisseurs et en énumérant les applets de commande, et met à jour l' objet en conséquence. Le Runspace doit ensuite être ouvert pour un traitement synchrone ou asynchrone. Après cela, il peut être utilisé pour exécuter des commandes. RunspaceSessionStateSessionState

Pour exécuter une commande, un pipeline (représenté par un Pipelineobjet) doit être créé et associé au runspace. L'objet pipeline est ensuite renseigné avec les applets de commande qui constituent le pipeline. Pour les opérations séquentielles (comme dans un script PowerShell), un objet Pipeline est créé pour chaque instruction et imbriqué dans un autre objet Pipeline. Lorsqu'un pipeline est créé, Windows PowerShell appelle le processeur de pipeline, qui résout les applets de commande dans leurs assemblys respectifs (le processeur de commandes ) et leur ajoute une référence au pipeline, et les associe à InputPipe, OutputPipeet des ErrorOutputPipeobjets, pour représenter la connexion avec le pipeline. Les types sont vérifiés et les paramètres liés à l'aide de la réflexion . Une fois le pipeline configuré, l'hôte appelle la Invoke()méthode pour exécuter les commandes, ou son équivalent asynchrone, InvokeAsync(). Si le pipeline a l' Write-Hostapplet de commande à la fin du pipeline, il écrit le résultat sur l'écran de la console. Sinon, les résultats sont transmis à l'hôte, qui peut soit appliquer un traitement supplémentaire, soit afficher la sortie elle-même.

Microsoft Exchange Server 2007 utilise les API d'hébergement pour fournir son interface graphique de gestion. Chaque opération exposée dans l'interface graphique est mappée à une séquence de commandes PowerShell (ou pipelines). L'hôte crée le pipeline et les exécute. En fait, la console PowerShell interactive elle-même est un hôte PowerShell, qui interprète les scripts entrés sur la ligne de commande, crée les Pipelineobjets nécessaires et les appelle.

Configuration d'état souhaitée

DSC permet de spécifier de manière déclarative comment un environnement logiciel doit être configuré.

Lors de l'exécution d'une configuration , DSC s'assurera que le système obtient l'état décrit dans la configuration. Les configurations DSC sont idempotentes. Le gestionnaire de configuration local (LCM) interroge périodiquement le système à l'aide du flux de contrôle décrit par les ressources (éléments impératifs de DSC) pour s'assurer que l'état d'une configuration est maintenu.

Versions

Utilisant initialement le nom de code « Monad », PowerShell a été présenté pour la première fois au public lors de la Professional Developers Conference en octobre 2003 à Los Angeles. Toutes les versions majeures sont toujours prises en charge et chaque version majeure présente une rétrocompatibilité avec les versions précédentes.

Windows PowerShell 1.0

Session Windows PowerShell 1.0 à l'aide de la console Windows

PowerShell 1.0 a été publié en novembre 2006 pour Windows XP SP2 , Windows Server 2003 SP1 et Windows Vista . C'est un composant facultatif de Windows Server 2008 .

Windows PowerShell 2.0

Windows PowerShell ISE v2.0 sur Windows 7 , un environnement de développement intégré pour les scripts PowerShell.

PowerShell 2.0 est intégré à Windows 7 et Windows Server 2008 R2 et est publié pour Windows XP avec Service Pack 3, Windows Server 2003 avec Service Pack 2 et Windows Vista avec Service Pack 1.

PowerShell v2 inclut des modifications du langage de script et de l'API d'hébergement, en plus d'inclure plus de 240 nouvelles applets de commande.

Les nouvelles fonctionnalités de PowerShell 2.0 incluent :

  • Remoting PowerShell : à l'aide de WS-Management , PowerShell 2.0 permet d'appeler des scripts et des applets de commande sur une machine distante ou un grand nombre de machines distantes.
  • Tâches en arrière-plan : Également appelées PSJob , elles permettent d' invoquer une séquence de commandes (script) ou un pipeline de manière asynchrone. Les travaux peuvent être exécutés sur la machine locale ou sur plusieurs machines distantes. Une applet de commande interactive dans un PSJob bloque l'exécution de la tâche jusqu'à ce qu'une entrée utilisateur soit fournie.
  • Transactions : activez l'applet de commande et les développeurs peuvent effectuer des opérations transactionnelles . PowerShell 2.0 inclut des applets de commande de transaction pour démarrer, valider et annuler une PSTransaction ainsi que des fonctionnalités pour gérer et diriger la transaction vers l'applet de commande et les opérations de fournisseur participantes. Le fournisseur de registre PowerShell prend en charge les transactions.
  • Fonctions avancées : Ce sont des applets de commande écrites à l'aide du langage de script PowerShell. Initialement appelée « applet de commande de script », cette fonctionnalité a ensuite été renommée « fonctions avancées ».
  • SteppablePipelines : Cela permet à l'utilisateur de contrôler quand les fonctions BeginProcessing(), ProcessRecord()et EndProcessing()d'une applet de commande sont appelées.
  • Modules : Cela permet aux développeurs de scripts et aux administrateurs d'organiser et de partitionner les scripts PowerShell en unités autonomes et réutilisables. Le code d'un module s'exécute dans son propre contexte autonome et n'affecte pas l'état à l'extérieur du module. Les modules peuvent définir un environnement d'exécution restreint à l'aide d'un script. Ils ont un état persistant ainsi que des membres publics et privés.
  • Langage de données : un sous-ensemble spécifique au domaine du langage de script PowerShell qui permet de découpler les définitions de données des scripts et d'importer des ressources de chaîne localisées dans le script au moment de l'exécution ( Script Internationalization ).
  • Débogage de script : Il permet de définir des points d' arrêt dans un script ou une fonction PowerShell. Des points d'arrêt peuvent être définis sur des lignes, des lignes et des colonnes, des commandes et un accès en lecture ou en écriture aux variables. Il comprend un ensemble d'applets de commande pour contrôler les points d'arrêt via un script.
  • Événementiel : Cette fonctionnalité permet d'écouter, de transférer et d'agir sur les événements de gestion et système. L'événementiel permet aux hôtes PowerShell d'être informés des changements d'état de leurs entités gérées. Il permet également aux scripts PowerShell de s'abonner à ObjectEvents , PSEvents et WmiEvents et de les traiter de manière synchrone et asynchrone.
  • Windows PowerShell Integrated Scripting Environment (ISE) : PowerShell 2.0 inclut un hôte PowerShell basé sur une interface graphique qui fournit un débogueur intégré, la coloration syntaxique , la saisie semi-automatique et jusqu'à 8 consoles PowerShell Unicode (Runspaces) dans une interface utilisateur à onglets, ainsi que la possibilité pour exécuter uniquement les pièces sélectionnées dans un script.
  • Transfert de fichiers réseau : prise en charge native du transfert de fichiers prioritaire, limité et asynchrone entre les machines à l'aide du service de transfert intelligent en arrière - plan (BITS).
  • Nouvelles applets de commande : y compris Out-GridView, qui affiche des données tabulaires dans l' objet WPF GridView , sur les systèmes qui le permettent et si ISE est installé et activé.
  • Nouveaux opérateurs : opérateurs-Split , -Join, et Splatting ( @).
  • Gestion des exceptions avec Try-Catch-Finally : Contrairement aux autres langages .NET, cela permet plusieurs types d'exceptions pour un seul bloc catch.
  • Emboîtable ici-Strings : PowerShell ici cordes ont été améliorés et peuvent désormais nicher.
  • Bloquer les commentaires : PowerShell 2.0 prend en charge les blocs de commentaires en utilisant <#et #>comme délimiteurs.
  • Nouvelles API : les nouvelles API vont de donner plus de contrôle sur l'analyseur et le temps d'exécution PowerShell à l'hôte, à la création et à la gestion d'une collection d'espaces d'exécution ( RunspacePools) ainsi que la possibilité de créer des espaces d'exécution restreints qui n'autorisent qu'un sous-ensemble configuré de PowerShell à être invoqué . Les nouvelles API prennent également en charge la participation à une transaction gérée par PowerShell

Windows PowerShell 3.0

PowerShell 3.0 est intégré à Windows 8 et à Windows Server 2012 . Microsoft a également rendu PowerShell 3.0 disponible pour Windows 7 avec Service Pack 1, pour Windows Server 2008 avec Service Pack 1 et pour Windows Server 2008 R2 avec Service Pack 1.

PowerShell 3.0 fait partie d'un package plus vaste, Windows Management Framework 3.0 (WMF3), qui contient également le service WinRM pour prendre en charge la communication à distance. Microsoft a réalisé plusieurs versions de Community Technology Preview de WMF3. Une première version d'aperçu de la technologie communautaire 2 (CTP 2) de Windows Management Framework 3.0 a été publiée le 2 décembre 2011. Windows Management Framework 3.0 a été publié pour une disponibilité générale en décembre 2012 et est inclus avec Windows 8 et Windows Server 2012 par défaut.

Les nouvelles fonctionnalités de PowerShell 3.0 incluent :

  • Tâches planifiées : les tâches peuvent être planifiées pour s'exécuter à une date et une heure prédéfinies à l'aide de l' infrastructure du planificateur de tâches Windows .
  • Connectivité de session : Les sessions peuvent être déconnectées et reconnectées. Les sessions à distance sont devenues plus tolérantes aux pannes temporaires du réseau.
  • Écriture de code améliorée : la complétion de code (IntelliSense) et des extraits de code sont ajoutés. PowerShell ISE permet aux utilisateurs d'utiliser des boîtes de dialogue pour renseigner les paramètres des applets de commande PowerShell.
  • Prise en charge de la délégation : les tâches administratives peuvent être déléguées à des utilisateurs qui n'ont pas d'autorisations pour ce type de tâche, sans leur accorder d'autorisations supplémentaires perpétuelles.
  • Mise à jour de l'aide : Les documentations d'aide peuvent être mises à jour via la commande Update-Help.
  • Détection automatique de module : Les modules sont chargés implicitement chaque fois qu'une commande de ce module est invoquée. La complétion de code fonctionne également pour les modules déchargés.
  • Nouvelles commandes : des dizaines de nouveaux modules ont été ajoutés, notamment des fonctionnalités de gestion des disques get-WmiObject win32_logicaldisk, des volumes, des pare-feu, des connexions réseau et des imprimantes, qui étaient auparavant effectuées via WMI.

Windows PowerShell 4.0

PowerShell 4.0 est intégré à Windows 8.1 et à Windows Server 2012 R2 . Microsoft a également rendu PowerShell 4.0 disponible pour Windows 7 SP1 , Windows Server 2008 R2 SP1 et Windows Server 2012 .

Les nouvelles fonctionnalités de PowerShell 4.0 incluent :

  • Configuration de l'état souhaité : extensions de langage déclaratif et outils qui permettent le déploiement et la gestion des données de configuration pour les systèmes utilisant les normes de gestion DMTF et le protocole de gestion WS
  • Nouvelle politique d'exécution par défaut : Sur les serveurs Windows, la politique d'exécution par défaut est désormais RemoteSigned.
  • Save-Help : L'aide peut désormais être enregistrée pour les modules installés sur des ordinateurs distants.
  • Débogage amélioré : le débogueur prend désormais en charge les workflows de débogage, l'exécution de scripts à distance et la préservation des sessions de débogage lors des reconnexions de session PowerShell.
  • -PipelineVariable switch : Un nouveau paramètre omniprésent pour exposer l'objet pipeline actuel en tant que variable à des fins de programmation
  • Diagnostics réseau pour gérer les commutateurs réseau physiques et virtualisés Hyper-V
  • La syntaxe des méthodes Where et ForEach fournit une autre méthode de filtrage et d'itération sur les objets.

Windows PowerShell 5.0

Icône PowerShell 5.0

Windows Management Framework (WMF) 5.0 RTM qui inclut PowerShell 5.0 a été republié sur le Web le 24 février 2016, à la suite d'une version initiale avec un bogue grave.

Fonctionnalités clés incluses :

  • Le nouveau class mot - clé qui crée des classes pour la programmation orientée objet
  • Le nouveau enummot-clé qui crée des énumérations
  • OneGetapplets de commande pour prendre en charge le gestionnaire de packages Chocolatey
  • Extension de la prise en charge de la gestion des commutateurs aux commutateurs réseau de couche 2 .
  • Débogage pour les tâches d'arrière-plan PowerShell et les instances de PowerShell hébergées dans d'autres processus (chacun d'entre eux est appelé un « espace d'exécution »)
  • Configuration de l'état souhaité (DSC) Gestionnaire de configuration locale (LCM) version 2.0
  • Configurations partielles DSC
  • Méta-configurations DSC Local Configuration Manager
  • Création de ressources DSC à l'aide de classes PowerShell

Windows PowerShell 5.1

Il a été publié avec la mise à jour anniversaire de Windows 10 le 2 août 2016 et dans Windows Server 2016 . PackageManagement prend désormais en charge les proxys, PSReadLine prend désormais en charge ViMode et deux nouvelles applets de commande ont été ajoutées : Get-TimeZone et Set-TimeZone. Le module LocalAccounts permet d'ajouter/supprimer des comptes d'utilisateurs locaux. Un aperçu de PowerShell 5.1 a été publié pour Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 et Windows Server 2012 R2 le 16 juillet 2016, et a été publié le 19 janvier 2017.

PowerShell 5.1 est la première version à venir en deux éditions de "Desktop" et "Core". L'édition "Desktop" est la continuation du Windows PowerShell traditionnel qui s'exécute sur la pile .NET Framework. L'édition "Core" s'exécute sur .NET Core et est fournie avec Windows Server 2016 Nano Server. En échange d'un encombrement réduit, ce dernier manque de certaines fonctionnalités telles que les applets de commande pour gérer le presse-papiers ou joindre un ordinateur à un domaine, les applets de commande WMI version 1, les applets de commande du journal des événements et les profils. Il s'agissait de la version finale de PowerShell conçue exclusivement pour Windows.

PowerShell Core 6

PowerShell Core 6.0 a été annoncé pour la première fois le 18 août 2016, lorsque Microsoft a dévoilé PowerShell Core et sa décision de rendre le produit multiplateforme , indépendant de Windows, gratuit et open source. Il a atteint sa disponibilité générale le 10 janvier 2018 pour Windows, macOS et Linux . Il a son propre cycle de vie de support et adhère à la politique de cycle de vie de Microsoft introduite avec Windows 10 : seule la dernière version de PowerShell Core est prise en charge. Microsoft prévoit de publier une version mineure pour PowerShell Core 6.0 tous les six mois.

Le changement le plus important dans cette version de PowerShell est l'extension aux autres plates-formes. Pour les administrateurs Windows, cette version de PowerShell n'incluait aucune nouvelle fonctionnalité majeure. Dans une interview avec la communauté le 11 janvier 2018, l'équipe PowerShell a été invitée à répertorier les 10 choses les plus excitantes qui se produiraient pour un professionnel de l'informatique Windows qui migrerait de Windows PowerShell 5.1 vers PowerShell Core 6.0 ; en réponse, Angel Calvo de Microsoft n'a pu en nommer que deux : multiplateforme et open source.

Selon Microsoft, l'une des nouvelles fonctionnalités de PowerShell 6.1 est la "Compatibilité avec plus de 1900 applets de commande existants dans Windows 10 et Windows Server 2019 ". Pourtant, aucun détail de ces applets de commande ne peut être trouvé dans la version complète du journal des modifications. Microsoft a déclaré plus tard que ce nombre était insuffisant car PowerShell Core n'a pas réussi à remplacer Windows PowerShell 5.1 et à gagner du terrain sur Windows. Il était, cependant, populaire sur Linux.

PowerShell Core 6.2 se concentre principalement sur les améliorations de performances, les corrections de bogues et les petites améliorations de cmdlet et de langage qui ont amélioré la productivité des développeurs.

PowerShell 7

PowerShell 7 remplace les produits PowerShell Core 6.x ainsi que Windows PowerShell 5.1, qui est la dernière version de Windows PowerShell prise en charge. L'objectif du développement était de faire de PowerShell 7 un remplacement viable pour Windows PowerShell 5.1, c'est-à-dire d'avoir une quasi-parité avec Windows PowerShell en termes de compatibilité avec les modules fournis avec Windows.

Les nouvelles fonctionnalités de PowerShell 7 incluent :

  • Le -Parallelcommutateur pour l' ForEach-Objectapplet de commande pour aider à gérer le traitement parallèle
  • Presque parité avec Windows PowerShell en termes de compatibilité avec les modules Windows intégrés
  • Une nouvelle vue d'erreur
  • L' Get-Errorapplet de commande
  • Opérateurs de chaînage de pipeline ( &&et ||) qui permettent l'exécution conditionnelle de la prochaine applet de commande dans le pipeline
  • L' opérateur ?: pour le fonctionnement ternaire
  • L' ??=opérateur qui n'affecte une valeur à une variable que lorsque la valeur existante de la variable est nulle
  • L' ??opérateur pour la fusion nulle
  • Multiplateforme Invoke-DscResource(expérimental)
  • Retour de l' Out-GridViewapplet de commande
  • Retour de l' -ShowWindowinterrupteur pour leGet-Help

Comparaison des applets de commande avec des commandes similaires

Le tableau suivant contient une sélection des applets de commande fournies avec PowerShell, en notant des commandes similaires dans d'autres interpréteurs de ligne de commande bien connus. Beaucoup de ces commandes similaires sont prêtes à l'emploi et définies comme des alias dans PowerShell, ce qui permet aux personnes familiarisées avec d'autres shells courants de commencer à travailler facilement.

Comparaison des applets de commande PowerShell avec les commandes internes et externes d'autres interpréteurs de ligne de commande
PowerShell (applet de commande) PowerShell (alias) Invite de commandes Windows Shell Unix La description
Get-ChildItem gci, dir, ls réal ls Répertorie tous les fichiers et dossiers dans le dossier actuel ou donné
Test-Connexion ping ping ping Envoie des requêtes d'écho ICMP à la machine spécifiée à partir de la machine actuelle, ou demande à une autre machine de le faire
Obtenir du contenu gc, type, chat taper chat Obtient le contenu d'un fichier
Obtenir-Commande gcm aide , type , qui , compgen Répertorie les commandes disponibles et obtient le chemin de la commande
Obtenir de l'aide aide, mec aider à propos , homme Imprime la documentation d'une commande sur la console
Effacer-hôte cls, clair cls dégager Efface l'écran
Copier l'article cpi, copie, cp copie , xcopy , robocopy cp Copie des fichiers et des dossiers vers un autre emplacement
Déplacer-élément mi, bouger, mv mouvement mv Déplace les fichiers et dossiers vers un nouvel emplacement
Retirer l'objet ri, del, effacer, rmdir, rd, rm del , effacer , rmdir , rd rm , rmdir Supprime des fichiers ou des dossiers
Renommer l'élément rni, ren, mv ren , renommer mv Renomme un seul fichier, dossier, lien physique ou lien symbolique
Obtenir l'emplacement gl, cd, pwd CD pwd Affiche le chemin de travail (dossier actuel)
Pop-Emplacement popd popd popd Modifie le chemin de travail à l'emplacement le plus récemment poussé sur la pile
Push-Emplacement poussé poussé poussé Stocke le chemin de travail sur la pile
Définir-Emplacement sl, cd, chdir cd , chdir CD Modifie le chemin de travail
Tee-Objet tee N / A tee Canalise l'entrée vers un fichier ou une variable, en passant l'entrée le long du pipeline
Écriture-Sortie écho, écris écho écho Imprime des chaînes ou d'autres objets sur la sortie standard
Get-Process gps, ps tlist, tasklist ps Répertorie tous les processus en cours d'exécution
Arrêter le processus spps, tuer tuer , tâcher tuer Arrête un processus en cours
Chaîne de sélection sls findstr trouver , grep Imprime des lignes correspondant à un motif
Ensemble-Variable sv, définir ensemble env, exporter, définir, setenv Crée ou modifie le contenu d'une variable d'environnement
Invoke-WebRequest iwr, curl, wget boucle wget , curl Obtient le contenu d'une page Web sur Internet

Remarques

Extensions de nom de fichier

Extension La description
.ps1 Fichier de script
.psd1 fichier manifeste du module ; est généralement livré avec un module de script ou un module binaire
.psm1 Fichier de module de script
.dll Fichier de module binaire compatible DLL
.ps1xml Fichier de définitions de format et de type
.xml Fichier de données sérialisé conforme à XML
.psc1 Fichier console
.pssc Fichier de configuration de session
.psrc Fichier de capacité de rôle

Support d'application

Application Version Applets de commande Fournisseur GUI de gestion
Serveur d'échange 2007 402 Oui Oui
Serveur Windows 2008 Oui Oui Non
Serveur Microsoft SQL 2008 Oui Oui Non
Microsoft SharePoint 2010 Oui Oui Non
Gestionnaire de configuration System Center 2012 R2 400+ Oui Non
Responsable des opérations System Center 2007 74 Oui Non
Gestionnaire de machine virtuelle System Center 2007 Oui Oui Oui
Gestionnaire de protection des données System Center 2007 Oui Non Non
Serveur de cluster de calcul Windows 2007 Oui Oui Non
Suite Microsoft Transporter pour Lotus Domino 08.02.0012 47 Non Non
Microsoft PowerTools pour Open XML 1,0 33 Non Non
IBM WebSphere MQ 6.0.2.2 44 Non Non
Modules complémentaires IoT Core 74 Inconnu Inconnu
Quest Management Shell pour Active Directory 1.7 95 Non Non
Commande Specops du logiciel d'opérations spéciales 1,0 Oui Non Oui
VMware vSphere PowerCLI 6.5 R1 500+ Oui Oui
les services de l'information de l'Internet 7.0 54 Oui Non
Centre de dépannage Windows 7 6.1 Oui Non Oui
Boîte à outils de déploiement Microsoft 2010 Oui Oui Oui
Boîte à outils NetApp PowerShell 4.2 2000+ Oui Oui
JAMS Scheduler – Système d'accès et de gestion des tâches 5.0 52 Oui Oui
UIAutomation 0,8 432 Non Non
Dell Equallogic 3.5 55 Non Non
LOGINinventaire 5.8 Oui Oui Oui
SePSX 0.4.1 39 Non Non

Mise en œuvre alternative

Un projet nommé Pash , un jeu de mots sur le shell Unix " bash " bien connu , a été une réimplémentation open source et multiplateforme de PowerShell via le framework Mono . Pash a été créé par Igor Moochnick, écrit en C# et a été publié sous la licence publique générale GNU . Le développement de Pash s'est arrêté en 2008, a été relancé sur GitHub en 2012 et s'est finalement arrêté en 2016 lorsque PowerShell est devenu officiellement open source et multiplateforme.

Voir également

Les références

Lectures complémentaires

Liens externes