L’im­por­tance des ad­mi­nis­tra­teurs système dans les en­tre­prises ne doit pas être sous-estimée, car ce n’est qu’avec une in­fras­truc­ture in­for­ma­tique fiable et fonc­tion­nant en per­ma­nence qu’une en­tre­prise peut atteindre le maximum de son ef­fi­ca­cité éco­no­mique. Selon la taille de l’or­ga­ni­sa­tion, cela nécessite la sur­veil­lance et le contrôle de dizaines, voire de centaines d’or­di­na­teurs si­mul­ta­né­ment. C’est une tâche gi­gan­tesque que seuls des spé­cia­listes formés ayant une con­nais­sance ap­pro­fon­die des con­nexions internes au système peuvent maîtriser.

Si un problème survient avec plusieurs or­di­na­teurs en même temps ou si une nouvelle solution de sécurité doit être chargée sur l’ensemble du réseau le plus ra­pi­de­ment possible, il ne serait ni rapide ni éco­no­mique pour un ad­mi­nis­tra­teur de visiter chacun des appareils et de répéter toujours les mêmes actions. Windows Po­wer­Shell permet d’accélérer con­si­dé­ra­ble­ment ces processus et d’au­to­ma­ti­ser autant que possible les tâches de routine. Cela simplifie gran­de­ment le travail de l’ad­mi­nis­tra­teur système. Vous pouvez également découvrir ce que le logiciel peut faire dans notre article.

Qu’est-ce que Windows Po­wer­Shell?

Windows Po­wer­Shell est, comme son nom l’indique, un shell. En in­for­ma­tique, c’est une interface entre un or­di­na­teur et son uti­li­sa­teur. Le terme anglais shell signifie coquille, mais au sens figuré, il est utilisé pour décrire une coquille ex­té­rieure. C’est également le cas en in­for­ma­tique, où le terme désigne l’interface uti­li­sa­teur visible à travers laquelle on peut interagir avec les fonctions internes du système d’un or­di­na­teur.

Les shells sont gé­né­ra­le­ment orientés commande et sont donc contrôlés ex­clu­si­ve­ment par le clavier et la saisie de texte. Ils cons­ti­tuent donc une al­ter­na­tive aux in­ter­faces uti­li­sa­teur gra­phiques (graphical user in­ter­faces, abrégés par GUI), qui se naviguent prin­ci­pa­le­ment à la souris, de même que l’Ex­plo­ra­teur Windows. Dans la mesure où les shells per­met­tent également d’accéder à des fonctions et des com­po­sants beaucoup plus nombreux et profonds d’un PC, ils sont préférés par de nombreux pro­fes­sion­nels de l’in­for­ma­tique et ad­mi­nis­tra­teurs système.

Pourquoi Windows Po­wer­Shell ?

Jusqu’à récemment, la ligne de commande command.com et l’invite de commande cmd.exe étaient res­pec­ti­ve­ment les shells par défaut des systèmes d’ex­ploi­ta­tion DOS et Windows. Ils peuvent être utilisés par les uti­li­sa­teurs d’or­di­na­teurs avancés pour ouvrir des ap­pli­ca­tions de console, résoudre des problèmes ou naviguer sur les lecteurs d’un PC. Par exemple, la commande netstat peut être utilisée pour obtenir des in­for­ma­tions de base sur toutes les activités réseau. Cependant, command.com et cmd.exe ont toujours rencontré deux problèmes : tous les com­po­sants du système ne sont pas ac­ces­sibles par leur in­ter­mé­diaire, et leurs langages de script sont con­si­dé­rés comme limités en fonc­tion­na­lité. Ainsi, depuis quelque temps déjà, ils sont con­si­dé­rés comme moins aboutis que les shells Linux et Unix courants.

Les dé­ve­lop­peurs de Microsoft avaient donc prévu de supprimer ces res­tric­tions depuis les années 1990. Au fil du temps, ils ont développé divers shells avec lesquels ce plan a réussi, parfois bien parfois moins bien. Monad, lancé pour la première fois en 2003 et rebaptisé Po­wer­Shell trois ans plus tard, s’est révélé par­ti­cu­liè­re­ment ré­vo­lu­tion­naire.

Les Common En­gi­nee­ring Criteria de Microsoft, selon lesquels tous les produits serveurs de l’en­tre­prise doivent supporter Po­wer­Shell depuis 2009, en ont fait la solution centrale de gestion et d’au­to­ma­ti­sa­tion sous Windows. À partir de Windows 2008, il a été livré avec le système d’ex­ploi­ta­tion en option, les versions ul­té­rieures ont été livrées avec le système d’ex­ploi­ta­tion en standard, et comme framework open source, il est également dis­po­nible en té­lé­char­ge­ment pour les versions an­té­rieures de Windows.

En 2016, il a été décidé de proposer une pla­te­forme Shell in­dé­pen­dante. L’intention de Microsoft était qu’à l’avenir, Po­wer­Shell de­vien­drait également un outil universel pour les ad­mi­nis­tra­teurs système en dehors de Windows, c’est-à-dire sous Linux et MacOS. Depuis, Po­wer­Shell s’est de plus en plus répandu et trouve cons­tam­ment de nouveaux soutiens. En résumé, Po­wer­Shell est le suc­ces­seur attendu depuis longtemps de l’invite de commande.

Qu’est-ce qui dif­fé­ren­cie Po­wer­Shell de l’invite de commande ?

En quoi le nouveau framework Microsoft diffère-t-il exac­te­ment de l’invite de commande ha­bi­tuelle ? Pour faire simple, Po­wer­Shell possède toutes les fonc­tion­na­li­tés de cmd.exe, peut en faire beaucoup mieux, et fait d’autres choses qui étaient jusqu’alors im­pos­sibles sous Windows.

En principe, Po­wer­Shell fournit la même gamme de commandes que cmd.exe. Pour résumer, Po­wer­Shell peut être utilisé de la même manière que l’invite de commande, avec une con­nais­sance suf­fi­sante des commandes standard. Cependant, il permet également d’accéder à des fonctions internes Windows plus ap­pro­fon­dies, telles que le registre et Windows Ma­na­ge­ment Ins­tru­men­ta­tion (WMI), qui n’étaient pas ac­ces­sibles au­pa­ra­vant avec cmd.exe. De plus, la ligne de commande de Windows Po­wer­Shell suit la logique claire d’une structure de commande et d’une syntaxe co­hé­rentes et à cet égard est plus sig­ni­fi­ca­tive que cmd.exe.

Windows Po­wer­Shell se distingue également par une autre ca­rac­té­ris­tique : con­trai­re­ment aux invites de commandes et aux systèmes de type Unix, le programme fonc­tionne en­tiè­re­ment basé sur les objets au lieu de se contenter d’enchaîner les résultats des commandes. Chaque objet possède à la fois des pro­prié­tés (pro­per­ties) et des méthodes (methods) qui spé­ci­fient comment il peut être utilisé. Par exemple, l’objet de processus Windows re­pré­sente des pro­prié­tés telles que les noms et ID de processus et les méthodes de pause et d’in­ter­rup­tion des processus.

Dans la mesure où les résultats des commandes sont toujours transmis sous forme d’objets .NET, Po­wer­Shell peut être utilisé pour effectuer des tâches beaucoup plus complexes que cmd.exe. Ceci fonc­tionne en utilisant la sortie d’un objet dans le tube comme entrée pour l’objet suivant. Par exemple, vous pouvez filtrer des quantités im­por­tantes et complexes de données pour les ex­ten­sions de fichiers et les formater sous forme de liste claire.

Windows Po­wer­Shell est plus qu’une simple ligne de commande, c’est un en­vi­ron­ne­ment de script complet et puissant. Vous pouvez écrire vos propres commandes ou combiner plusieurs commandes dans des scripts complexes qui sim­pli­fient les tâches de gestion du système. Remoting permet également d’exécuter des scripts sur n’importe quel nombre de systèmes en même temps, quel que soit leur em­pla­ce­ment, et donc de gérer, con­fi­gu­rer, capturer et réparer ces scripts.

Cette variété d’options et de fonc­tion­na­li­tés révèle également quel est le public principal de Windows Po­wer­Shell : les pro­fes­sion­nels de l’in­for­ma­tique et les ad­mi­nis­tra­teurs système qui ont une con­nais­sance ap­pro­fon­die de l’uti­li­sa­tion des shells et qui sont prêts à apprendre Windows Po­wer­Shell pour une ef­fi­ca­cité nettement su­pé­rieure. Pour les uti­li­sa­teurs qui tra­vail­lent prin­ci­pa­le­ment avec l’interface graphique Windows et n’utilisent l’invite de commande que spo­ra­di­que­ment, Po­wer­Shell n’offre aucune valeur ajoutée par­ti­cu­lière, d’autant plus que le temps né­ces­saire à la fa­mi­lia­ri­sa­tion est assez long.

Voici un aperçu des avantages et des in­con­vé­nients de Windows Po­wer­Shell sur l’invite de commande :

Avantages de Po­wer­Shell In­con­vé­nients de Po­wer­Shell
Toutes les commandes sont dis­po­nibles à l’invite de commandes Processus d’ap­pren­tis­sage complexe et exigeant
Accès à des res­sources internes Windows plus profondes telles que le registre et WMI S’adresse prin­ci­pa­le­ment aux pro­fes­sion­nels de l’in­for­ma­tique et aux ad­mi­nis­tra­teurs système.
Fonc­tion­ne­ment plus efficace grâce à une structure de commande et une syntaxe co­hé­rentes Aucun avantage sup­plé­men­taire pour les uti­li­sa­teurs de l’interface graphique qui utilisent rarement l’invite de commande.
L’orien­ta­tion objet complète permet l’exécution de tâches plus complexes par pi­pe­li­ning Nécessite un effort d’adap­ta­tion
Un en­vi­ron­ne­ment de script étendu permet une au­to­ma­ti­sa­tion efficace des processus  
Ad­mi­nis­tra­tion in­dé­pen­dante de l’em­pla­ce­ment de plusieurs systèmes par té­lé­com­mande  

Comment fonc­tionne Windows Po­wer­Shell ?

Po­wer­Shell se compose es­sen­tiel­le­ment de deux parties, le moteur Po­wer­Shell et le langage de script Po­wer­Shell. Les deux peuvent être utilisés sé­pa­ré­ment ou en com­bi­nai­son pour tirer le meilleur parti du programme.

Le moteur Po­wer­Shell

L’in­ter­pré­teur de ligne de commande (en anglais command-line in­ter­pre­ter, abrégé par CLI) de Po­wer­Shell permet à l’uti­li­sa­teur d’accéder aux fonctions internes du système d’ex­ploi­ta­tion via le clavier. Les commandes cor­res­pon­dantes du programme sont appelées cmdlets (pro­non­cées com­mand­lets, ce qui signifie petites commandes). Selon une syntaxe cohérente, ils sont toujours composés d’un verbe et d’un nom au singulier, par exemple, Stop-Process ou Sort-Object. Les pa­ra­mètres sont spécifiés dans un cmdlet en fonction du paramètre de formule Parameter [Valeur], par exemple :

Get-EventLog System Newest 3 (pour ouvrir les trois dernières entrées du journal des événements système.)
Conseil

Bien qu’il s’agisse d’une con­ven­tion dans Po­wer­Shell pour entrer des commandes avec une lettre majuscule, les mi­nus­cules fonc­tion­nent aussi bien.

Les plus de 100 cmdlets de base com­pren­nent également des commandes standard fré­quem­ment utilisées à partir de l’invite de commande, qui sont dis­po­nibles sous forme d’alias entre autres, et sont destinées à faciliter la prise en main du nouveau shell par les uti­li­sa­teurs. Par exemple, la commande cd utilisée pour changer un ré­per­toire a l’équi­valent Set-Location, qui exécute exac­te­ment la même fonction. Tous les alias pré-cons­truits peuvent être affichés à l’aide du cmdlet Get-Alias. Vous pouvez également utiliser le cmdlet Set-Alias pour créer vos propres alias. Par exemple, vous pouvez utiliser le tube suivant pour assigner l’alias ed à la commande notepad (pour le programme Notepad) afin de ne pas avoir à saisir autant de fois que né­ces­saire pour exécuter le programme :

Set-Alias ed notepad (pour ouvrir Notepad avec la commande ed)
Set-Alias scr1 C:\Users\IEUser\Desktop\script1.ps1 (pour exécuter un script avec l’abréviation scr1)

Le tableau suivant contient quelques exemples de cmdlets cou­ram­ment utilisés et leurs alias associés :

Alias Cmdlet Fonction
cd Set-Location Modifier le ré­per­toire courant
dir Get-ChildItem Lister tous les éléments d’un dossier
gi Get-Item Appeler un élément spé­ci­fique
ps Get-Process Lister tous les processus
gsv Get-Service Lister tous les services installés
gm Get-Member Afficher toutes les pro­prié­tés et méthodes d’un objet
clear Clear-Host Vider l’hôte Po­wer­Shell

La structure de commande stricte et facile à suivre de Po­wer­Shell vous permet de tra­vail­ler plus ef­fi­ca­ce­ment qu’à l’invite de commande. L’option de compléter au­to­ma­ti­que­ment les cmdlets en cours d’écriture avec la touche [Tab] permet de gagner encore plus de temps. Dans de nombreux cas, le programme détecte même les commandes in­com­plè­te­ment tapées.

Les cmdlets peuvent être utilisés in­di­vi­duel­le­ment ou en pipeline pour que la sortie d’un objet puisse être lue et réu­ti­li­sée par l’objet suivant. Pour ajouter deux cmdlets à la même pipeline, utilisez sim­ple­ment le symbole |. De cette façon, par exemple, vous pouvez lister tous les processus dis­po­nibles et les trier par ID en même temps :

Get-Process | Sort-Object ID

Les variables sont définies avec le symbole $. Comme d’habitude, elles peuvent être utilisées pour stocker des outputs qui seront récupérés ul­té­rieu­re­ment pendant le pi­pe­li­ning. Ceci permet même à Po­wer­Shell de stocker les résultats de plusieurs commandes en pipeline à la fois, par exemple :

$a = (Get-Process | Sort-Object ID)

Le langage de script Po­wer­Shell

Une grande partie du langage de script de Po­wer­Shell peut vous sembler familière à partir de C# et d’autres langages de script. Non seulement vous pouvez l’utiliser pour écrire vos propres cmdlets (et les partager avec d’autres uti­li­sa­teurs si né­ces­saire), mais vous pouvez également regrouper plusieurs commandes con­sé­cu­tives dans un fichier script.ps1 pour étendre les fonc­tion­na­li­tés du shell. De nombreux exemples d’ap­pli­ca­tion sont en­vi­sa­geables, de l’exécution de tâches de routine simples à l’au­to­ma­ti­sa­tion presque complète des processus de sur­veil­lance et de contrôle. Les scripts con­tien­nent toujours une des­crip­tion de l’ap­pli­ca­tion et sont exécutés avec le préfixe « . » suivi du chemin complet du fichier. Voici un exemple :

.C:\Users\IEUser\Desktop\script1.ps1

Quelles sont les ap­pli­ca­tions spé­ci­fiques de Po­wer­Shell?

Si vous avez suf­fi­sam­ment de pratique et d’expertise, Po­wer­Shell peut rendre de nom­breuses tâches d’ad­mi­nis­tra­tion système beaucoup plus efficaces. Vous trouverez ci-dessous quatre exemples d’ap­pli­ca­tions re­pré­sen­ta­tives.

Or­ga­ni­sa­tion du ré­per­toire : renommer plusieurs fichiers à la fois

Supposons que vous deviez renommer environ 1 000 documents du schéma Texte (1).docx, Texte (2).docx, etc. pour que les espaces du nom de fichier soient remplacés par des tirets : dans ce cas, il ne serait pas sou­hai­table de renommer chaque document un par un. À la place, vous uti­li­se­rez pro­ba­ble­ment cmd.exe ou, mieux encore, un outil externe. Le pi­pe­li­ning dans Po­wer­Shell offre encore plus de flexi­bi­lité lors du renommage de grandes quantités de données.

Pour ce faire, allez d’abord dans le ré­per­toire dans lequel se trouvent les documents. Vous pouvez le faire fa­ci­le­ment avec le cmdlet Set-Location en com­bi­nai­son avec le chemin de fichier complet. En voici un exemple :

Set-Location C:\Users\IEUser\Desktop\Text folder

Vous pouvez également utiliser l’Ex­plo­ra­teur Windows pour naviguer jusqu’au ré­per­toire approprié, cliquer sur la barre de chemin et taper po­wer­shell pour ouvrir une fenêtre Po­wer­Shell pour ce ré­per­toire. Utilisez ensuite le cmdlet suivant pour renommer les documents sé­lec­tion­nés :

Get-ChildItem *docx | Rename-Item -NewName {$_.name -replace " ","_"}

Ex­pli­ca­tion : Get-ChildItem liste tous les fichiers du ré­per­toire. Avec l’ajout *docx, seuls les documents Word avec le format cor­res­pon­dant sont filtrés : les documents PDF qui se trouvent également dans le dossier ne seront donc pas pris en compte. Le symbole | ajoute une autre commande au pipeline, Rename-Item, qui indique que quelque chose doit être renommé. -NewName spécifie le nouveau nom en utilisant un bloc de script qui fonc­tionne avec la variable $_.name qui re­pré­sente l’objet courant. Et .name est la propriété avec le nom du fichier. Enfin, utilisez le paramètre -replace pour spécifier que tous les espaces doivent être convertis en tirets.

Collecte de données : vé­ri­fi­ca­tion des services en cours d’exécution sur un PC

Avant de mettre en œuvre une nouvelle solution de sécurité sur le réseau, vous devez vérifier quels services sont déjà installés sur un PC par­ti­cu­lier. L’outil de base pour cela est le cmdlet Get-Service, qui liste tous les services. Les fonctions de filtre de Po­wer­Shell vous per­met­tent également de ne vi­sua­li­ser qu’un sous-ensemble des résultats, par exemple tous les services en cours d’exécution. Ceci fonc­tionne avec le cmdlet suivant :

Get-Service | Where-Object {$_.status -eq "running"}

L’output de Get-Service achemine vers le cmdlet Where-Object. Where-Object filtre tous les services par leur statut (re­pré­senté par la variable $_.status et le paramètre -eq "running") et liste les services en cours d’exécution. Vous pouvez également trier la liste pré­fil­trée par nom d’affichage si né­ces­saire en ajoutant un autre cmdlet au pipeline :

Get-Service | Where-Object {$_.status -eq "running"} | Sort-Object DisplayName
Conseil

Avec l’extension pipeline more, vous pouvez également res­truc­tu­rer la longue liste de services afin de pouvoir la parcourir page par page.

Erreur de diag­nos­tic : recherche d’erreurs système dans le journal des évé­ne­ments

Les journaux d’évé­ne­ments (event logs en anglais) four­nis­sent aux ad­mi­nis­tra­teurs système des in­for­ma­tions sur les messages d’erreur dans les ap­pli­ca­tions, dans le système d’ex­ploi­ta­tion ou dans les fonctions de sécurité d’un pé­ri­phé­rique. Utilisez la commande Get-EventLog pour afficher et gérer ces journaux. Par exemple, si vous souhaitez consulter les messages d’erreur dans l’Ob­ser­va­teur d’évé­ne­ments système, saisissez ceci :

Get-EventLog System | Where-Object {$_.entryType -Match "Error"}

Si Po­wer­Shell renvoie trop de résultats, vous pouvez utiliser le paramètre -Newest 100 pour limiter la liste aux 100 dernières entrées du journal système, qui sont ensuite filtrées pour les erreurs :

Get-EventLog System -Newest 100 | Where-Object {$_.entryType -Match "Error"}

Pour des in­for­ma­tions dé­tail­lées sur les messages d’erreur, trans­fé­rez la sortie de ce pipeline vers le cmdlet Format-List :

Get-EventLog System -Newest 100 | Where-Object {$_.entryType -Match "Error"} | Format-List

Main­te­nance à distance : services de contrôle sur or­di­na­teurs distants

Le Windows Ma­na­ge­ment Ins­tru­men­ta­tion (WMI) donne accès à presque tous les pa­ra­mètres et fonctions des or­di­na­teurs Windows, ce qui en fait l’outil le plus important pour l’au­to­ma­ti­sa­tion des processus et la main­te­nance à distance des postes de travail nu­mé­riques. Vous pouvez également utiliser le cmdlet Get-WmiObject pour les or­di­na­teurs distants, de sorte que vous pouvez également utiliser Windows Po­wer­Shell comme outil de gestion système. Par exemple, si vous avez besoin d’in­for­ma­tions de classe Win32_BIOS sur une machine du réseau (re­pré­sen­tée par le paramètre -ma­chi­ne­name), la commande suivante vous aidera :

Get-WmiObject Win32_Bios -Machinename

Autrement, vous pouvez tra­vail­ler avec le paramètre -Class suivi du chemin complet de la classe :

Get-WmiObject - Machinename -Class Win32_Service

Vous pouvez main­te­nant accéder à distance aux pa­ra­mètres système internes de l’or­di­na­teur externe. L’exemple suivant illustre comment récupérer les méthodes du service Windows Update Client pour savoir quels cmdlets peuvent être utilisés pour le démarrer, l’arrêter et le re­dé­mar­rer :

Get-WmiObject -machinename -Class Win32_Service -Filter "Name=‘wuauserv’"

Le nom d’hôte Get-WmiObject-Ma­chi­ne­name cible d’abord l’hôte désiré et sé­lec­tionne ensuite la classe Win32_Service en utilisant le paramètre -Class. Le client Windows Update Client avec l’abré­via­tion wuauserv est alors filtré à partir des services existants. Avec le cmdlet Get-Member déjà connu et le paramètre de méthode -Type Method, vous obtenez un aperçu de toutes les méthodes de wuauserv qui vous per­met­tent de contrôler com­plè­te­ment le client à distance.

Get-WmiObject -Machinename -Class Win32_Service -Filter "Name=‘wuauserv’" | Get-Member -Type Method
Aller au menu principal