PowerShell - PowerShell
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 |
Version stable | 7.1.5 / 14 octobre 2021
|
Version préliminaire | v7.2.0-preview.10 / 28 septembre 2021
|
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 |
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-Help
applet de commande. Le contenu de l'aide locale mis à jour peut être récupéré sur Internet via l' Update-Help
applet de commande. Alternativement, l'aide du Web peut être obtenue au cas par cas via le -online
passage à 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.COM
de MS-DOS et Windows 9x , ainsi que cmd.exe
de 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 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 Cmdlet
ou 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 ParameterAttribute
et sont définies avant l'appel à BeginProcessing()
. Ceux qui correspondent à l'entrée du pipeline sont également flanqués de ParameterAttribute
, mais avec le ValueFromPipeline
jeu 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-Process
applet de commande peut être redirigée vers le Where-Object
pour filtrer tout processus ayant moins de 1 Mo de mémoire paginée , puis vers l' Sort-Object
applet de commande (par exemple, pour trier les objets par nombre de descripteurs), puis enfin vers l' Select-Object
applet 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-Default
applet 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 function
mot - 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 :
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 ( Exception
objet ) sont renvoyés, qui sont interceptés à l'aide de la try ... catch
construction (bien qu'une trap
construction 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 .ps1
fichier ou un .psm1
fichier (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.
Runspace
SessionState
SessionState
Pour exécuter une commande, un pipeline (représenté par un Pipeline
objet) 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
, OutputPipe
et des ErrorOutputPipe
objets, 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-Host
applet 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 Pipeline
objets 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
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
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()
etEndProcessing()
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
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
enum
mot-clé qui crée des énumérations -
OneGet
applets 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
-Parallel
commutateur pour l'ForEach-Object
applet 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-Error
applet 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-GridView
applet de commande - Retour de l'
-ShowWindow
interrupteur 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.
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 , où | 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, |
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
- Modèle d'information commun (informatique)
- Comparaison des interpréteurs de commandes
- Comparaison des langages de programmation
- Gestion d'entreprise basée sur le Web
- Fenêtres de script hôte
- Terminal Windows
Les références
Lectures complémentaires
- Finke, Douglas (2012). Windows PowerShell pour les développeurs . O'Reilly Media . ISBN 978-1-4493-2270-0.
- Holmes, Lee (2006). Référence rapide de Windows PowerShell . O'Reilly Media . ISBN 0-596-52813-2.
- Holmes, Lee (2007). Livre de recettes Windows PowerShell . O'Reilly Media . ISBN 978-0-596-52849-2.
- Jones, Don ; Hicks, Jeffery (2010). Windows PowerShell 2.0 : TFM (3e édition). Sapien Technologies. ISBN 978-0-9821314-2-8.
- Jones, Don (2020). Shell d'une idée : l'histoire inédite de PowerShell . Auto-édité. ISBN 978-1-9536450-3-6.
- Kopczynski, Tyson ; Handley, Pete ; Shaw, Marco (2009). Windows PowerShell Unleashed (2e édition). Éducation Pearson . ISBN 978-0-672-32988-3.
- Kumaravel, Arul ; Blanc, Jon ; Naixin Li, Michael ; Happell, Scott; Xie, Guohui; Vutukuri, Krishna C. (2008). Programmation professionnelle Windows PowerShell : composants logiciels enfichables, applets de commande, hôtes et fournisseurs . Presse Wrox . ISBN 978-0-470-17393-0.
- Oakley, Andy (2005). Monade (alias PowerShell) . O'Reilly Media . ISBN 0-596-10009-4.
- Watt, André (2007). Windows PowerShell professionnel . Presse Wrox . ISBN 978-0-471-94693-9.
- Wilson, Ed (2013). Étape par étape de Windows PowerShell 3.0 . Microsoft Presse . ISBN 978-0-7356-6339-8.
- Wilson, Ed (2014). Meilleures pratiques Windows PowerShell . Microsoft Presse . ISBN 978-0-7356-6649-8.