PowerShell 101 : une alternative à la ligne de commande sur Linux et Mac

L’interface de ligne de commande (CLI) de Windows® existe et résiste au passage du temps, depuis les jours lointains de MS-DOS® jusqu’à l’actuel PowerShell 101. Voyons le PowerShell de base.

Quand je suis allé à l’université dans les années 80, les logiciels propriétaires régnaient. Les vieux ordinateurs allemands équipés d’Unix® qui imprimaient nos horaires étaient remplacés par des ordinateurs personnels “modernes”. La maison de logiciels Microsoft® – à l’époque – était liée à MS-DOS®, nous avons donc appris à utiliser les commandes : dir, cls, format pour nos disquettes…

Il y a un peu plus de dix ans, à Redmond, on a décidé de dépoussiérer, de moderniser et de renforcer le CLI. Né sous le nom de Monad®, renommé PowerShell®, nous vous présentons aujourd’hui le PowerShell de base ou PowerShell 101.

powershell 101 1

Description : Basic Powershell – Logo
(Wikipedia https://commons.wikimedia.org/wiki/File:PowerShell_5.0_icon.png)

PowerShell de base

Le système d’exploitation Linux a le vent en poupe ; le blog de Pandora FMS contient de nombreux articles à son sujet. Nous sommes également présents dans la surveillance des systèmes propriétaires ; Windows®, comme son exposant maximal. Et chaque fois qu’une nouvelle version sort, nous sommes là, à tester et à vérifier.

Je pense qu’à cause de cette histoire de Linux, Microsoft a décidé de faire une compilation d’outils et de nouveaux concepts, en contrepartie des fonctionnalités GNU fournies avec Linux. Considérant que PowerShell Core existe depuis 2016 en tant que logiciel ouvert (licence MIT) mais avec des composants propriétaires de Windows®, nous l’avons maintenant disponible dans Ubuntu, CentOS (l’OS recommandé pour Pandora FMS) et macOS et même dans une autre architecture matérielle comme ARM.

Installation de PowerShell Core sous Linux

Dans Ubuntu, nous devons installer le gestionnaire de paquets snap : avec sudo apt install snap nous allons réussir notre mission. Ensuite nous allons lancer snap install powershell -classic

powershell 101 2

Description : snap install powershell – classic

Premières commandes

Après avoir lancé avec la commande pwsh (dans Windows® nous devrions chercher powershell.exe), nous aurons une fenêtre de terminal, avec “PS” d’indicatif (prompt) suivi de l’emplacement du répertoire. Dans les deux environnements, l’aspect est très similaire, nous allons donc généraliser à partir de maintenant.

Ensuite, mettons notre mémoire en pratique :

  • cls: “Efface” l’écran, laissant de la place pour exécuter un nouveau cycle de commandes. Ce n’est pas du tout nécessaire, mais c’est un peu comme écrire à la craie sur un tableau noir et effacer pour commencer à expliquer un autre sujet.
  • dir -ad : pour lister uniquement les répertoires.
  • echo message: quand on veut montrer un texte spécifique à l’écran. Cela ne semble pas utile, mais lorsque nous l’intégrons dans un script, il est d’une utilité redoutable pour indiquer la progression d’une tâche ou le résultat de cette même tâche.

Nous n’allons plus tarder à utiliser les anciennes commandes MS-DOS. Au XXIe siècle, nous devrions continuer à utiliser cette vieille technologie et, ce faisant, ces vieux programmes qui communiquaient ou interagissaient avec des chaînes de texte (STDIN, STDOUT).

Commande-let de base dans PowerShell 101

Au XXIe siècle, tout est plus complexe, ce sont des années d’expérience accumulées. PowerShell 101 n’est pas un outil simple comme celui que nous utilisons sous Linux. Pour cet outil, il existe des command-let dont le nom est abrégé en cmdlet. Cela signifie que les commandes que nous avons testées ne sont pas vraiment celles que nous pensions : ce sont des alias de la cmdlet par défaut, ce qui permet une rétrocompatibilité. Maintenant, il y a plus. Analysons le cas de la commande date, utilisée pour rémunérer la date.

Son vrai nom est Get-Date et bien qu’il renvoie la date et l’heure actuelles dans un format légèrement différent de celui de l’alias, les deux font fondamentalement la même chose. Pour les tâches de surveillance, nous devons fournir cette valeur dans un format très spécifique : c’est là que les cmdlets font leur travail de manière totalement différente.

powershell 101 3

Description : “Travailler avec la cmdlet avec des variables de date et d’heure”

Avec le cmdlet Get-Date nous pouvons :

  • Affiche la date de l’ordinateur.
  • Affichez-la dans un format personnalisé.
  • Utilisez des méthodes ; dans ce cas, nous visualisons quel numéro de jour correspond à la date du 20 mai 2019 (c’est le 140e jour de l’année).
  • Enregistrez une variable de date dans un format personnalisé.
  • Convertissez cette variable en une chaîne de texte et enregistrez-la dans un fichier.
  • Remarquez que nous avons utilisé le pipe pour faire communiquer une cmdlet avec une autre. La cmdlet que vous recevez utilisée pour écrire sur le disque s’appelle Add-Content. (Vous ne vous souvenez pas de Linux ?).
  • La contrepartie en lecture est Get-Content et son alias s’appelle… “cat”, tout comme celui utilisé sous Linux pour lister le contenu d’un fichier texte !

Faites une pause, vérifiez cela avant de passer au point suivant.

Travailler avec les cmdlets

Avec tout cela comme base, nous pouvons cesser de considérer le Powershell de base comme un outil et commencer à l’évoquer comme une boîte à outils. Pour ce faire, nous allons utiliser la commande Get-Command :

L’utiliser sans aucun paramètre nous rendra beaucoup d’outils, ceux que nous avons installés dans notre ordinateur.

Si nous nous renseignons sur une commande particulière, par exemple Get-Command Get-Date renverra des informations sur le type de commande, son nom, sa version et sa source (la bibliothèque à laquelle elle appartient). Pour Get-Date, il sera indiqué qu’il s’agit d’un cmdlet appartenant à Microsoft.PowerShell.Utility et pour Clear-Host (clear screen, cls) qu’il s’agit simplement d’une fonction. La saisie d’un alias renvoie le cmdlet ou la fonction d’origine.

Si nous ne nous souvenons pas du nom exact, nous utiliserons des caractères génériques ; par exemple, avec Get-Command *date*, nous obtiendrons une liste de toutes les commandes contenant cette chaîne.

Aide avec Powershell de base

L’aide a également été pensée comme un référentiel, puisqu’avec la commande Get-Help, nous pouvons également télécharger du contenu sur notre ordinateur :

  • Get-Help Get-Date: affiche des informations complètes sur la façon d’utiliser Get-Date, sa syntaxe, ses alias, etc.
  • Get-Help Get-Date -Online: ouvrira une instance de notre navigateur web et ouvrira les dernières informations en ligne sur la commande Get-Date.
    Pour travailler hors ligne, c’est-à-dire pour sauvegarder l’aide mise à jour : Update-Help.

À l’aide de Get-Help, découvrons les commandes Get-Location et Set-Location.

Supposons que nous devions créer un dossier ou un fichier ; pour cela nous n’utiliserons plus la commande md ou mkdir (cette dernière s’écrit exactement de la même façon sous Linux) mais nous utiliserons la commande New-Item :

New-Item “path/name” -type directory

Commande de nouveaux articles.

“chemin/nom” du répertoire ; les guillemets sont nécessaires lorsqu’ils sont entrecoupés.

Paramètre -type et ensuite ce que nous avons installé comme fournisseur : Fichier, Répertoire, SymbolicLink, Junction ou HardLink.

Parlons maintenant des fournisseurs : nous pouvons télécharger les fournisseurs dont nous avons besoin ou nous pouvons créer nos propres fournisseurs et les associer à la commande. Mon imagination s’envole : nous développons un programme qui agit comme un client FTP et nous le proposons comme fournisseur afin de pouvoir le vendre à n’importe qui pour qu’il l’intègre dans son PowerShell… mais attendez, il y a plus. Si nous le faisons à notre tour – si notre licence le permet – notre client peut ajouter notre programme FTP comme bibliothèque à ses propres projets. Qu’en pensez-vous ?

Note : PowerShell est également capable de fonctionner via API et même les analystes de sécurité ont créé leurs propres environnements PowerShell, certains mélangés au langage Python… qui n’ont même pas besoin des fichiers exécutables de Microsoft !

Pandora FMS et tâches de surveillance

La flexibilité de Pandora FMS nous permet d’utiliser PowerShell pour accéder rapidement à des commandes complexes. Par exemple, dans l’environnement Windows, nous devons savoir quels sont les correctifs installés :

Get-CimInstance -ClassName Win32_QuickFixEngineering -ComputerName

Nous pourrons visualiser les composants avec la commande Get-Member, extraire le contenu et faire notre complément dans Pandora FMS pour PowerShell !

Vous voulez mieux connaître ce que Pandora FMS peut vous offrir ? Découvrez-le ici.

Si vous avez plus de 100 appareils à surveiller, vous pouvez contacter l’équipe Pandora FMS via le formulaire suivant.

N’oubliez pas non plus que si vos besoins de surveillance sont plus limités, vous avez à votre disposition la version OpenSource de Pandora FMS. Vous trouverez plus d’informations ici.

Shares