Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales

Historiquement, les utilitaires en ligne de commande dans les systèmes Unix sont mieux développés que dans Windows, mais avec l'apparition d'une nouvelle solution, la situation a changé.

Windows PowerShell permet aux administrateurs système d'automatiser la plupart des tâches routinières. Il est possible de modifier les paramètres, d'arrêter et de démarrer des services, ainsi que d'effectuer la maintenance de la plupart des applications installées. Considérer cette fenêtre bleue comme un simple interpréteur de commandes serait incorrect. Cette approche ne représente pas l'essence des innovations proposées par Microsoft. En réalité, les possibilités de Windows PowerShell sont beaucoup plus vastes : dans une petite série d'articles, nous tenterons d'expliquer en quoi la solution de Microsoft se distingue des outils plus familiers.

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales

Fonctionnalités principales 

Évidemment, Windows PowerShell est d'abord un shell de commandes avec un langage de script, initialement créé sur la plateforme .NET Framework, et plus tard sur .NET Core. Contrairement aux shells qui prennent et retournent des données textuelles, Windows PowerShell travaille avec des classes .NET qui possèdent des propriétés et des méthodes. PowerShell permet d'exécuter des commandes classiques tout en donnant accès aux objets COM, WMI et ADSI. Elle utilise divers dépôts, tels que le système de fichiers ou le registre Windows, pour lesquels des 'providers' ont été créés. Il est également important de noter la possibilité d'intégrer des composants exécutables de PowerShell dans d'autres applications pour réaliser diverses opérations, y compris via une interface graphique. Il est vrai également que de nombreuses applications pour Windows donnent accès à leurs interfaces de gestion via PowerShell. 

Windows PowerShell permet de :

  • Modifier les paramètres du système d'exploitation ;
  • Gérer les services et les processus ;
  • Configurer les rôles et les composants du serveur ;
  • Installer des logiciels ;
  • Gérer les logiciels installés via des interfaces spécifiques ;
  • Intégrer des composants exécutables dans des programmes tiers ;
  • Créer des scripts pour automatiser les tâches d'administration ;
  • Travailler avec le système de fichiers, le registre Windows, le magasin de certificats, etc.

Shell et environnement de développement

Windows PowerShell existe sous deux formes : en plus d'un émulateur de console avec un shell de commande, il y a un environnement de script intégré (Integrated Scripting Environment — ISE). Pour accéder à l'interface de ligne de commande, il suffit de choisir le raccourci correspondant dans le menu Windows ou de lancer powershell.exe depuis le menu « Exécuter ». Une fenêtre bleue apparaîtra, se distinguant nettement par ses fonctionnalités de l'ancien cmd.exe. Elle propose l'auto-complétion et d'autres fonctionnalités familières aux utilisateurs de shells de commande pour les systèmes Unix.

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales

Pour travailler avec le shell, vous devez mémoriser certaines combinaisons de touches :

  • Les flèches haut et bas font défiler l'historique pour répéter les commandes précédemment saisies ;
  • La flèche droite à la fin de la ligne ressaisit la commande précédente caractère par caractère ;
  • Ctrl+Home supprime le texte saisi depuis la position du curseur jusqu'au début de la ligne ;
  • Ctrl+End supprime le texte depuis le curseur jusqu'à la fin de la ligne.

F7 affiche une fenêtre avec les commandes saisies et permet d'en sélectionner une. Dans la console, la sélection de texte avec la souris, le copier-coller, le positionnement du curseur, la suppression, backspace — tout fonctionne comme nous l'aimons.

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales
Windows PowerShell ISE est un environnement de développement complet avec un éditeur de code prenant en charge les onglets et la coloration syntaxique, un constructeur de commandes, un débogueur intégré et d'autres joies pour les programmeurs. Si vous tapez un tiret après le nom de la commande dans l'éditeur de l'environnement de développement, vous obtiendrez une liste déroulante avec tous les paramètres disponibles indiquant leur type. Vous pouvez lancer PowerShell ISE soit via un raccourci du menu système, soit à l'aide du fichier exécutable powershell_ise.exe.

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales

Cmdlets 

Dans Windows PowerShell, sont apparus ce qu'on appelle des cmdlets. Ce sont des classes spécialisées .NET qui intègrent diverses fonctionnalités. Elles sont nommées selon le principe « Action-Objet » (ou « Verbe-Nom », si vous préférez), et le lien séparé par un tiret ressemble au sujet et au verbe dans des phrases de langues naturelles. Par exemple, Get-Help signifie littéralement « Obtenir-Aide » ou dans le contexte de PowerShell : « Afficher-Aide ». En réalité, c'est l'équivalent de la commande man dans les systèmes Unix, et les manuels de PowerShell doivent être consultés de cette manière et non en invoquant les cmdlets avec l'option —help ou \/?.. N'oubliez pas également la documentation en ligne sur PowerShell : elle est plutôt détaillée chez Microsoft.

En plus de Get, d'autres verbes (et pas seulement des verbes, strictement parlant) sont utilisés dans les cmdlets pour désigner des actions. Voici quelques exemples dans la liste ci-dessous :

Ajouter — ajouter ;
Effacer — nettoyer ;
Activer — activer ;
Désactiver — désactiver ;
Nouveau — créer ;
Supprimer — enlever ;
Set — définir ;
Commencer — lancer ;
Arrêter — stopper ;
Exporter — exporter ;
Importer — importer.

Il existe des cmdlets système, utilisateur et optionnelles : en conséquence, toutes renvoient un objet ou un tableau d'objets. Elles ne sont pas sensibles à la casse, c'est-à-dire qu'il n'y a pas de différence du point de vue de l'interpréteur entre Get-Help et get-help. Le symbole ‘;’ est utilisé pour la séparation, mais il doit être utilisé uniquement si plusieurs cmdlets sont exécutés sur une seule ligne. 

Les cmdlets Windows PowerShell sont regroupés en modules (NetTCPIP, Hyper-V, etc.), et pour rechercher un objet et une action, il existe la cmdlet Get-Command. Pour afficher l'aide, on peut faire ainsi :

Get-Help Get-Command

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales

Par défaut, la commande affiche un résumé, mais des paramètres (arguments) peuvent être passés aux cmdlets si nécessaire. Grâce à ceux-ci, par exemple, on peut obtenir une aide détaillée (paramètre -Detailed) ou complète (paramètre -Full), ainsi que produire des exemples à l'écran (paramètre -Examples) :

Get-Help Get-Command -Examples

L'aide dans Windows PowerShell est mise à jour avec la cmdlet Update-Help. Si la ligne de commande devient trop longue, les arguments de la cmdlet peuvent être déplacés à la ligne suivante en écrivant le caractère de continuation ‘`’ et en appuyant sur Entrée — il n'est pas possible de tout écrire sur une seule ligne puis de continuer sur une autre.

Voici quelques exemples de cmdlets courantes : 

Get-Process — afficher les processus en cours d'exécution dans le système ;
Get-Service — afficher les services et leur statut ;
Get-Content — afficher le contenu d'un fichier.

Pour les cmdlets couramment utilisées et les utilitaires externes, Windows PowerShell a des synonymes courts — alias. Par exemple, dir est l'alias de Get-ChildItem. Il existe également des analogues de commandes des systèmes Unix (ls, ps, etc.), et la cmdlet Get-Help est appelée avec la commande help. La liste complète des synonymes peut être consultée avec la cmdlet Get-Alias :

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales

Scripts, fonctions, modules et langage PowerShell

Les scripts Windows PowerShell sont stockés sous forme de fichiers texte ordinaires avec l'extension .ps1. On ne peut pas les exécuter en double-cliquant : il faut faire un clic droit pour appeler le menu contextuel et choisir l'option « Exécuter dans PowerShell ». Depuis la console, il faut soit spécifier le chemin complet du script, soit se rendre dans le répertoire approprié et taper le nom du fichier. L'exécution des scripts est également limitée par la politique système, et pour vérifier les paramètres actuels, on peut utiliser la commande Get-ExecutionPolicy, qui renverra l'une des valeurs suivantes :

Restricted — l'exécution des scripts est interdite (par défaut) ;
AllSigned — seuls les scripts signés par un développeur de confiance peuvent être exécutés ;
RemoteSigned — l'exécution des scripts signés et des scripts personnels est autorisée ;
Unrestricted — l'exécution de tous les scripts est autorisée.

L'administrateur a deux options. La plus sûre consiste à signer les scripts, mais il s'agit d'une tâche assez complexe — nous allons nous pencher là-dessus dans les prochains articles. Pour l'instant, nous allons opter pour la solution la moins contraignante et modifier la politique :

Set-ExecutionPolicy RemoteSigned

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales
PowerShell devra être lancé en tant qu'administrateur, bien qu'il soit possible de modifier la politique pour l'utilisateur actuel à l'aide d'un paramètre spécial.

Les scripts sont écrits dans un langage de programmation orienté objet, dont les commandes sont nommées selon le même principe que les cmdlets précédemment examinés : « Action-Objet » (« Verbe-Souvent »). Leur principal objectif est l'automatisation des tâches d'administration, mais c'est un langage interprété complet, comprenant toutes les constructions nécessaires : conditions, boucles, variables, tableaux, objets, gestion des erreurs, etc. Tout éditeur de texte convient pour écrire des scripts, mais il est plus pratique de lancer Windows PowerShell ISE.

On peut passer des paramètres à un script, les rendre obligatoires et également définir des valeurs par défaut. De plus, Windows PowerShell permet de créer des fonctions et de les appeler de la même manière que les cmdlets : cela se fait avec la construction Function et des accolades. Un script avec des fonctions est appelé module et a l'extension .psm1. Les modules doivent être stockés dans des répertoires définis dans les variables d'environnement PowerShell. On peut les consulter avec la commande suivante :

Get-ChildItem Env:PSModulePath | Format-Table -AutoSize

Convoyeurs

Dans le dernier exemple, nous avons appliqué une structure familière aux utilisateurs des environnements Unix. Dans Windows PowerShell, le pipe permet également de transférer la sortie d'une commande en entrée d'une autre, mais il y a une différence substantielle dans l'implémentation du pipeline : il ne s'agit pas d'un ensemble de caractères ou d'un texte. Les cmdlets intégrés ou les fonctions personnalisées retournent des objets ou des tableaux d'objets, et peuvent également les recevoir en entrée. Comme dans le Bourne shell et ses nombreux successeurs, le pipeline simplifie l'exécution de tâches complexes dans PowerShell.

Un exemple simple de pipeline ressemble à ceci :

Get-Service | Sort-Object -property Status

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales
Tout d'abord, la cmdlet Get-Service est exécutée, puis tous les services obtenus sont transférés à la cmdlet Sort-Object pour être triés par la propriété Status. L'argument dans lequel le résultat du segment précédent du pipeline est passé dépend de son type — c'est généralement InputObject. Cette question sera traitée plus en détail dans un article consacré au langage de programmation PowerShell. 

Si désiré, la chaîne peut être prolongée et le résultat du travail de Sort-Object peut être passé à une autre cmdlet (elles seront exécutées de gauche à droite). D'ailleurs, les utilisateurs de Windows ont également accès à la structure familière à tous les utilisateurs de Unix pour une sortie paginée : 

Get-Service | Sort-Object -property Status | more

Exécution de tâches en arrière-plan 

Il arrive souvent qu'il soit nécessaire de lancer une certaine commande en arrière-plan, afin de ne pas attendre le résultat de son exécution dans la session de l'interpréteur de commandes. Dans Windows PowerShell, il y a plusieurs cmdlets pour cela :

Start-Job — lancement d'une tâche en arrière-plan ;
Stop-Job — arrêt d'une tâche en arrière-plan ;
Get-Job — affichage de la liste des tâches en arrière-plan ;
Receive-Job — affichage du résultat d'une tâche en arrière-plan ;
Remove-Job — suppression d'une tâche en arrière-plan ;
Wait-Job — ramener une tâche en arrière-plan dans la console.

Pour lancer une tâche en arrière-plan, nous utilisons la cmdlet Start-Job et indiquons la commande ou le jeu de commandes entre accolades :

Start-Job {Get-Service}

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales
Nous pouvons manipuler les tâches en arrière-plan dans Windows PowerShell en connaissant leurs noms. Commençons par apprendre à les afficher :

Get-Job

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales
Affichons maintenant le résultat du travail de la tâche Job1 :

Receive-Job Job1 | more

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales
C'est plutôt simple.

Exécution distante de commandes

Windows PowerShell permet d'exécuter des commandes et des scripts non seulement sur un ordinateur local, mais aussi sur un ordinateur distant, voire sur un groupe entier de machines. Il existe plusieurs manières d'y parvenir :

  • De nombreux cmdlets ont un paramètre -ComputerName, mais de cette façon, il n'est pas possible, par exemple, de créer un pipeline ;
  • Le cmdlet Enter-PSSession permet de créer une session interactive sur une machine distante ; 
  • Avec le cmdlet Invoke-Command il est possible d'exécuter des commandes ou des scripts sur un ou plusieurs ordinateurs distants.

Les versions de PowerShell

Depuis la première version sortie en 2006, PowerShell a beaucoup évolué. L'outil est disponible pour de nombreux systèmes fonctionnant sur différentes plateformes matérielles (x86, x86-64, Itanium, ARM) : Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux et OS X. La dernière version 6.2 a été publiée le 10 janvier 2018. Les scripts écrits pour les versions antérieures fonctionneront très probablement dans les versions ultérieures, mais des problèmes peuvent survenir avec la rétrocompatibilité, car au fil des ans, PowerShell a intégré un grand nombre de nouveaux cmdlets. Pour connaître la version de l'interpréteur de commandes installé sur l'ordinateur, on peut utiliser la propriété PSVersion de la variable intégrée $PSVersionTable :

$PSVersionTable.PSVersion

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales
On peut également utiliser le cmdlet :

Get-Variable -Name PSVersionTable –ValueOnly

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales
Il en va de même avec le cmdlet Get-Host. En réalité, il existe de nombreuses options, mais pour les utiliser, il faut étudier le langage de programmation PowerShell, ce que nous ferons dans l'article suivant. 

Résultats 

La société Microsoft a réussi à créer un interpréteur de commandes vraiment puissant avec un environnement intégré pratique pour le développement de scripts. Ce qui la distingue des outils que nous connaissons du monde Unix, c'est sa profonde intégration avec les systèmes d'exploitation de la famille Windows, ainsi qu'avec les logiciels qui leur sont destinés et la plateforme .NET Core. PowerShell peut être qualifié de shell orienté objet, car les cmdlets et les fonctions personnalisées retournent des objets ou des tableaux d'objets et peuvent les recevoir en entrée. Nous pensons que tous les administrateurs de serveurs Windows devraient maîtriser cet outil : le temps où ils pouvaient se passer de la ligne de commande est révolu. Un shell console avancé est particulièrement nécessaire sur nos VPS peu coûteux fonctionnant sous Windows Server Core, mais c'est une toute autre histoire.

Qu'est-ce que Windows PowerShell et comment l'utiliser ? Partie 1 : fonctionnalités principales

Seuls les utilisateurs enregistrés peuvent participer au sondage. Connectez-vous, s'il vous plaît.

Quels sujets devrait-on aborder en premier dans les prochains articles de la série ?

  • 53,2%Programmation en PowerShell123

  • 42,4%Fonctions et modules PowerShell98

  • 22,1%Comment signer ses propres scripts ?51

  • 12,1%Travail avec des dépôts via des fournisseurs (providers)28

  • 57,6%Automatisation de l'administration des ordinateurs avec PowerShell133

  • 30,7%Gestion des logiciels et intégration des composants exécutables PowerShell dans des produits tiers71

231 utilisateurs ont voté. 37 utilisateurs se sont abstenus.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster