Qu'est-ce que Windows PowerShell et que mange-t-il? Partie 1: Caractéristiques clés

Historiquement, les utilitaires de ligne de commande sur les systèmes Unix sont mieux développés que sur Windows, cependant, avec l'avènement d'une nouvelle solution, la situation a changé.

Windows PowerShell permet aux administrateurs système d'automatiser la plupart des tâches de routine. Avec son aide, vous pouvez modifier les paramètres, arrêter et démarrer les services, ainsi que réaliser la maintenance de la plupart des applications installées. Il serait faux de percevoir la fenêtre bleue comme un autre interpréteur de commandes. Cette approche ne reflète pas l'essence des innovations proposées par Microsoft. En fait, les possibilités de Windows PowerShell sont beaucoup plus larges: dans une courte série d'articles, nous allons essayer de comprendre en quoi la solution Microsoft diffère des outils plus familiers.



Principales caractéristiques 


Bien sûr, Windows PowerShell est principalement un interpréteur de commandes avec un langage de script, créé à l'origine sur la base du .NET Framework, et plus tard sur le .NET Core. Contrairement aux shells qui acceptent et renvoient des données textuelles, Windows PowerShell fonctionne avec des classes .NET qui ont des propriétés et des méthodes. PowerShell vous permet d'exécuter des commandes ordinaires et donne également accès aux objets COM, WMI et ADSI. Il utilise divers référentiels, tels que le système de fichiers ou le registre Windows, pour l'accès auquel le soi-disant fournisseurs (prestataires). Il convient de noter la possibilité d'incorporer des composants PowerShell exécutables dans d'autres applications pour implémenter diverses opérations, notamment via l'interface graphique. L'inverse est également vrai: de nombreuses applications Windows donnent accès à leurs interfaces de gestion via PowerShell. 

Windows PowerShell vous permet de:

  • Modifiez les paramètres du système d'exploitation;
  • Gérer les services et les processus;
  • Configurer les rôles et composants du serveur;
  • Installer le logiciel
  • Gérez les logiciels installés via des interfaces spéciales;
  • Intégrer des composants exécutables dans des programmes tiers;
  • Créez 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


Il existe Windows PowerShell de deux manières: en plus de l'émulateur de console avec un shell de commande, il existe un environnement de script intégré (ISE). Pour accéder à l'interface de ligne de commande, sélectionnez simplement le raccourci approprié dans le menu Windows ou exécutez powershell.exe dans le menu Exécuter. Une fenêtre bleue apparaît à l'écran, avec des capacités sensiblement différentes de celles de l'antidiluvian cmd.exe. Il existe une saisie semi-automatique et d'autres fonctionnalités familières aux utilisateurs de shells de commande pour les systèmes Unix.



Pour travailler avec le shell, vous devez vous rappeler 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 recycle la commande précédente caractère par caractère;
  • Ctrl + Début supprime le texte tapé de la position du curseur au début de la ligne;
  • Ctrl + Fin supprime le texte du curseur jusqu'à la fin de la ligne.

F7 affiche une fenêtre avec les commandes saisies et vous permet de sélectionner l'une d'entre elles. La sélection de la souris, le copier-coller, le positionnement du curseur, la suppression, le retour arrière fonctionnent également dans la console - tout comme nous le souhaitons.


Windows PowerShell ISE est un environnement de développement à part entière qui prend en charge les onglets et la coloration syntaxique avec un éditeur de code, un concepteur de commandes, un débogueur intégré et d'autres joies de la programmation. Si vous écrivez un trait d'union dans l'éditeur d'environnement de développement après le nom de la commande, vous obtiendrez tous les paramètres disponibles avec un type dans la liste déroulante. Vous pouvez lancer PowerShell ISE via un raccourci dans le menu système ou en utilisant le fichier exécutable powershell_ise.exe.


Cmdlets 


Dans Windows PowerShell, le soi-disant applets de commande Ce sont des classes .NET spécialisées qui contiennent diverses fonctionnalités. Ils sont nommés selon le principe «Action-Object» (ou «Verb-Noun, si vous l'aimez plus»), et une conjonction avec trait d'union ressemble au prédicat et au sujet dans les phrases des langues naturelles. Par exemple, Get-Help signifie littéralement «Get-Help» ou, dans le contexte de PowerShell: «Show-Help». En fait, il s'agit d'un analogue de la commande man dans les systèmes Unix et les manuels de PowerShell doivent être demandés de cette manière, et non en appelant des applets de commande avec la clé --help ou /?. N'oubliez pas la documentation PowerShell en ligne: Microsoft l'a assez détaillée.

En plus de Get, d'autres verbes (et pas seulement des verbes à proprement parler) sont utilisés dans les applets de commande pour indiquer les actions. Dans la liste ci-dessous, nous donnons quelques exemples:

Add- add;
Clear- nettoyer;
Enable- activer;
Disable- éteindre;
New- créer;
Remove- supprimer;
Set- demander;
Start- courir;
Stop- Arrêtez;
Export- exportation;
Import- importation.

Il existe des applets de commande système, utilisateur et facultatives: à la suite de l'exécution, elles renvoient toutes un objet ou un tableau d'objets. Ils ne sont pas sensibles à la casse, c'est-à-dire du point de vue de l'interpréteur de commandes, il n'y a pas de différence entre Get-Help et get-help. Le caractère ';' est utilisé pour la séparation, mais il n'est obligatoire de le définir que si plusieurs applets de commande sont exécutées sur la même ligne. 

Les applets de commande Windows PowerShell sont regroupées en modules (NetTCPIP, Hyper-V, etc.), et l'applet de commande Get-Command existe pour rechercher par objet et action. Vous pouvez afficher de l'aide comme ceci:

Get-Help Get-Command



Par défaut, la commande affiche une brève aide, mais si nécessaire, des paramètres (arguments) sont transmis aux applets de commande. En les utilisant, par exemple, vous pouvez obtenir une aide détaillée (paramètre -Detailed) ou complète (paramètre -Full), ainsi que des exemples d'affichage (paramètre -Examples):

Get-Help Get-Command -Examples

L'aide de Windows PowerShell est mise à jour avec l'applet de commande Update-Help. Si la ligne de commande est trop longue, les arguments de l'applet de commande peuvent être transférés à la suivante en écrivant le caractère de service `` '' et en appuyant sur Entrée - il suffit de terminer l'écriture de la commande sur une ligne et de continuer sur une autre.

Voici quelques exemples d'applets de commande courantes: 

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

Pour les applets de commande fréquemment utilisées et les utilitaires externes dans Windows PowerShell, il existe de courts synonymes - alias (de l'anglais Alias). Par exemple, dir est un alias de Get-ChildItem. La liste des synonymes contient des analogues de commandes des systèmes Unix (ls, ps, etc.), et l'applet de commande Get-Help est appelée par la commande help. Une liste complète des synonymes peut être consultée à l'aide de l'applet de commande Get-Alias:


Scripts, fonctions, modules et langage PowerShell


Les scripts Windows PowerShell sont stockés sous forme de fichiers texte avec l'extension .ps1. Vous ne pouvez pas les lancer avec un double clic: vous devez cliquer avec le bouton droit sur le menu contextuel et sélectionner l'élément "Exécuter dans PowerShell". À partir de la console, vous devrez soit spécifier le chemin d'accès complet au script, soit aller dans le répertoire approprié et écrire le nom du fichier. L'exécution de scripts est également limitée par la stratégie système, et pour vérifier les paramètres actuels, vous pouvez utiliser l'applet de commande Get-ExecutionPolicy, qui donnera l'une des valeurs suivantes:

Restricted- l'exécution de script est interdite (par défaut);
AllSigned- seul le lancement de scripts signés par un développeur de confiance est autorisé;
RemoteSigned- autorisé à exécuter des scripts signés et personnalisés;
Unrestricted- autorisé à exécuter tous les scripts.

L'administrateur a deux options. Le plus sûr consiste à signer des scripts, mais c'est une sorcellerie assez sérieuse - nous en parlerons dans les articles suivants. Maintenant, nous allons suivre la voie de la moindre résistance et changer la politique:

Set-ExecutionPolicy RemoteSigned


Pour ce faire, PowerShell devra être exécuté en tant qu'administrateur, bien qu'en utilisant un paramètre spécial, vous pouvez modifier la stratégie de l'utilisateur actuel.

Les scripts sont écrits dans un langage de programmation orienté objet, dont les commandes sont nommées selon le même principe que les applets de commande précédemment discutées: «Action-Object» («Verb-Noun»). Son objectif principal est l'automatisation des tâches d'administration, mais c'est un langage interprété à part entière qui a toutes les constructions nécessaires: branchement conditionnel, boucles, variables, tableaux, objets, gestion des erreurs, etc. Tout éditeur de texte convient à l'écriture de scripts, mais il est plus pratique de démarrer Windows PowerShell ISE.

Vous pouvez transmettre des paramètres au script, les rendre obligatoires et également définir des valeurs par défaut. De plus, Windows PowerShell vous permet de créer des fonctions et de les appeler de la même manière que les applets de commande: pour cela, vous utilisez la construction Function et les accolades. Un script avec des fonctions s'appelle un module et a l'extension .psm1. Les modules doivent être stockés dans des répertoires définis dans les variables d'environnement PowerShell. Vous pouvez les visualiser à l'aide de la commande suivante:

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

Convoyeurs


Dans le dernier exemple, nous avons utilisé une conception familière aux utilisateurs de shells pour les systèmes Unix. Dans Windows PowerShell, la barre verticale vous permet également de transférer la sortie d'une commande à l'entrée d'une autre, mais il existe une différence significative dans la mise en œuvre du pipeline: il ne s'agit pas d'un jeu de caractères ou d'un texte. Les applets de commande intégrées ou les fonctions définies par l'utilisateur renvoient des objets ou des tableaux d'objets et peuvent également les recevoir à l'entrée. Comme le shell Bourne et ses nombreux abonnés, PowerShell simplifie les tâches complexes avec un pipeline.

L'exemple le plus simple d'un pipeline ressemble à ceci:

Get-Service | Sort-Object -property Status


Tout d'abord, la cmdlet Get-Service est exécutée, puis tous les services qu'elle reçoit sont passés à la cmdlet Sort-Object pour être triés par la propriété Status. L'argument auquel le résultat de la section précédente du pipeline est transmis dépend de son type - il s'agit généralement d'un InputObject. Ce problème sera abordé plus en détail dans l'article consacré au langage de programmation PowerShell. 

Si vous le souhaitez, vous pouvez continuer la chaîne et transmettre le résultat de Sort-Object à une autre applet de commande (ils seront exécutés de gauche à droite). Soit dit en passant, la conception familière de Windows pour la sortie de pagination est également disponible pour tous les Unixoids: 

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

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


Très souvent, vous devez exécuter une certaine commande en arrière-plan afin de ne pas attendre le résultat de son exécution dans une session shell. Dans Windows PowerShell, il existe plusieurs applets de commande pour ce cas:

Start-Job- lancement d'une tâche en arrière-plan;
Stop-Job- arrêtez la tâche d'arrière-plan;
Get-Job- Afficher une liste des tâches d'arrière-plan;
Receive-Job- afficher le résultat de la tâche d'arrière-plan;
Remove-Job- suppression de la tâche d'arrière-plan;
Wait-Job- Transférez la tâche d'arrière-plan vers la console.

Pour démarrer une tâche en arrière-plan, nous utilisons l'applet de commande Start-Job et indiquons entre crochets une commande ou un ensemble de commandes:

Start-Job {Get-Service}


Les tâches d'arrière-plan dans Windows PowerShell peuvent être manipulées en connaissant leurs noms. Tout d'abord, apprenez à les afficher:

Get-Job


Maintenant, nous montrons le résultat de Job1:

Receive-Job Job1 | more


C'est assez simple.

Exécution de commandes à distance


Windows PowerShell vous permet d'exécuter des commandes et des scripts non seulement sur le local, mais également sur l'ordinateur distant, et même sur tout un groupe de machines. Il y a plusieurs moyens de le faire:

  • De nombreuses applets de commande ont un paramètre -ComputerName, mais cette méthode échouera, par exemple, lors de la création d'un pipeline;
  • L'applet de commande Enter-PSSessionvous permet de créer une session interactive sur une machine distante; 
  • À l'aide de l'applet de commande, Invoke-Commandvous pouvez exécuter des commandes ou des scripts sur un ou plusieurs ordinateurs distants.

Versions de PowerShell


Depuis sa première sortie en 2006, PowerShell a beaucoup changé. L'outil est disponible pour de nombreux systèmes fonctionnant sur différentes plates-formes 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 sont plus susceptibles de fonctionner dans les versions ultérieures, mais il peut y avoir des problèmes avec le portage inverse, car au fil des années de développement, un grand nombre de nouvelles applets de commande sont apparues dans PowerShell. Vous pouvez connaître la version du shell installée sur l'ordinateur à l'aide de la propriété PSVersion de la variable intégrée $ PSVersionTable:

$PSVersionTable.PSVersion


Vous pouvez également utiliser l'applet de commande:

Get-Variable -Name PSVersionTable –ValueOnly


La même opération est effectuée avec l'applet de commande Get-Host. En fait, il existe de nombreuses options, mais pour les utiliser, vous devez apprendre le langage de programmation PowerShell, ce que nous ferons dans le prochain article

Sommaire 


Microsoft a réussi à créer un shell de commande vraiment puissant avec un environnement intégré pratique pour développer des scripts. Il diffère des moyens qui nous sont familiers dans le monde Unix par une intégration profonde avec les systèmes d'exploitation Windows, ainsi que les logiciels pour eux et la plate-forme .NET Core. PowerShell peut être appelé un shell orienté objet, car les applets de commande et les fonctions définies par l'utilisateur renvoient des objets ou des tableaux d'objets et peuvent les recevoir à l'entrée. Nous pensons que tous les administrateurs de serveur Windows devraient posséder cet outil: le temps est passé où ils pouvaient se passer de la ligne de commande. Un shell de console avancé est particulièrement nécessaire sur notre VPS à faible coût exécutant Windows Server Core , mais c'est une autre histoire.

2: Windows PowerShell
3: ,
4: ,

Source: https://habr.com/ru/post/undefined/


All Articles