• 6 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 23/03/2023

Prenez en main les cmdlets pour extraire des données

Comprenez la structure d’une cmdlet PowerShell

Maintenant que vous avez vu comment prendre en main votre invite de commandes PowerShell, vous allez pouvoir utiliser vos premières “commandes lets”.

Vous allez très vite voir que la syntaxe d’une cmdlet, c'est-à-dire en quelque sorte la grammaire du langage, est plutôt simple.

Chaque commande est construite de la manière suivante :

Get est un verbe. Et Help est un substantif
La syntaxe d'une cmdlet

Par exemple, la première cmdlet que je vous invite à connaître est Get-Help

Get-Help  est la cmdlet qui vous permet d’obtenir de l’aide sur toutes les autres cmdlets présentes dans PowerSHell.

Description du système d'aide de Windows Powershell
Description du système d'aide de Windows Powershell

En tapant dans votre invite de commande PowerShell Get-Help  suivi d’une cmdlet, vous aurez un résumé du fonctionnement.

Un essai de Get-Help avec Get-Process dans l'invite de commandes
Un essai de Get-Help avec Get-Process dans l'invite de commandes

Des verbes pour les cmdlets, il y en a une multitude, et ils répondent à des recommandations précises de la part de Microsoft.

Vous pouvez retrouver par exemple les verbes suivants :

GetSetNewReadWriteJoinRenameShowEnableInvokeStartStopAddWait

D’accord, on a des verbes, des noms, mais est-ce qu’on peut en plus avoir d’autres informations pour travailler ?

Eh bien oui ! À ces verbes et noms peuvent s’ajouter des options et les valeurs de ces options.

Get-Help est la cmdlet Name est l'option Process est la valeur de l'option
Syntaxe d'une cmdlet avec option

Par exemple, pour notre cmdlet  Get-Help  , nous pouvons ajouter l’option  -name  qui nous permet de lister les articles contenant un mot bien précis.

Essayez avec Get-Help -Name Process   .

Ajout de l'option -Name Process à la cmdlet Get-Help
Ajout de l'option -Name Process à la cmdlet Get-Help

Vous voyez, les options sont très utiles pour nos cmdlets !

Récupérez votre première information système à l’aide d’une commande

Pour vous montrer toute la force de PowerShell dans le cadre de l’administration de vos postes, nous allons vous aider à récupérer vos premières informations sur votre système d’exploitation avec la cmdlet  Get-WmiObject  .

Celui-ci peut s’exécuter par exemple avec l’option -class suivie du nom de la classe. Dans notre exemple, il s’agira de la classe win32_operatingsystem.

Certaines cmdlets n’ont pas besoin du nom de l’option, par exemple si cette option est l’unique option de la classe.

Get-WmiObject -class win32_operatingsystem

Get-wmiObject -class win32_operatingsystem
Get-wmiObject -class win32_operatingsystem

Ce n'est pas un peu décevant comme résultat ? Je m’attendais à des informations bien plus nombreuses et pertinentes !

Effectivement, ces informations ne sont pas vraiment utiles en l’état. Mais vous allez très rapidement voir que d’autres informations importantes sont accessibles grâce au chaînage des cmdlets.

Chaînez vos cmdlets

Imaginez, vous souhaitez obtenir tous les éléments d’un chemin qui sont des répertoires.

Comment vous y prendriez-vous ?

Je sais ! Avec une cmdlet. Un  Get-ChildItem  ?

Tout à fait. Mais le  Get-ChildItem  nous donne tous les éléments. Pas seulement les répertoires.

Si vous regardez le  Get-ChildItem , vous verrez que les répertoires ont un mode particulier : “d - r- - - ”.

Observez le mode des répertoires d-r---
Observez le mode des répertoires d-r---

Nous allons voir maintenant comment sélectionner uniquement les modes d-r- - -. Et pour ce faire, on va utiliser une autre cmdlet : Where-Object  .

Cette cmdlet est spécialisée dans la sélection d’éléments dans un objet, en fonction de critères.

Maintenant, vous vous demandez sans doute comment dire à Where-Object  comment filtrer les données de notre Get-ChildItem ? C’est là que les pipelines entrent en jeu !

Les pipelines ?!

Oui. Les pipelines. Imaginez que vous ayez une cmdlet qui renvoie des objets. Vous souhaitez que les objets en sortie de cette cmdlet deviennent l’entrée de la cmdlet suivante ? Eh bien les pipelines sont faits pour !

Notre ligne d’instruction de sélection de dossier deviendra celle-ci :

Get-ChildItem | Where-Object {$_.Mode -eq "d-r---"}

Laissez-moi vous l’expliquer plus en détail. Nous retrouvons une première cmdlet, Get-ChildItem  , qui va avoir en sortie une liste d’objets correspondant aux éléments présents dans le dossier.

Nous ajoutons ensuite un caractère, le pipe, ou séparateur vertical.

Nous avons ensuite la seconde cmdlet,  Where-Object  , qui permet de faire un filtre. Pour donner des paramètres de filtrage à ce Where-Object , nous allons ouvrir un bloc, via les accolades, ou nous mettrons $_Mode -eq “d - r - - -”. Laissez-moi vous expliquer plus en détail :

  • $_.Mode : La variable $_ (ou $PSItem) est une variable spéciale de PowerShell qui contient l’objet actif dans l’objet pipeline. C'est-à-dire que pour chaque objet que compose la première cmdlet, à un instant t la variable $_ aura pour valeur l’objet en cours. Le “.Mode” est pour sélectionner uniquement la propriété Mode de l’objet.

  • Le -eq est l’opérateur de comparaison correspondant à une égalité (-equal). Vous en découvrirez d’autres dans le chapitre de la partie 2 “Ajoutez de la logique fonctionnelle pour répondre à des besoins”.

  • “d - r - - -” est la chaîne de caractères qui correspond au mode pour les dossiers.

Et si on essayait ensemble ? Reprenons notre exemple avec Get-WmiObject  . Vous vous rappelez que dans l’état, un Get-WmiObject -class win32_operatingsystem  n’affiche pas beaucoup d’informations.

Eh bien grâce au pipe, et à la cmdlet  “Select-Object”  , nous allons pouvoir afficher beaucoup plus d’informations.

Allez-y ! Testez le chaînage des cmdlets  Get-WmiObject  et  Select-Object  en entrant les cmdlets suivantes dans votre invite PowerShell :

Get-WmiObject -Class Win32_OperatingSystem | Select-Object -Property *

Test du chaînage des cmdlets
Test du chaînage des cmdlets

Ah oui ! Il y a tout de suite beaucoup plus d’informations intéressantes. Et disons que je ne veuille que le nom de l’ordinateur ?

Eh bien dans ce cas, il vous suffit de modifier un tout petit peu votre option de filtrage en  :

Get-WmiObject -Class Win32_OperatingSystem | Select-Object -Property PSComputerName

Et voilà ! Vous avez réussi à extraire des informations systèmes en chaînant vos cmdlets. Félicitations !

À vous de jouer !

Vous recevez un ticket sur votre interface GLPI vous demandant d’ajouter en réponse au ticket la commande PowerShell permettant de récupérer la liste des fichiers de plus de 1 Go via une commande filtrée.

En vous aidant de votre invite de commandes PowerShell, essayez de trouver l’instruction qui répondra au mieux à la demande.

La réponse dans quelques lignes !

*

*

*

*

*

*

*

*

*

Réponse :

Get-ChildItem -Path c:\ -recurse | Where-Object {$_.Length -gt 1GB}

Comme vous devez le savoir, la cmdlet  Get-ChildItem  permet de récupérer les différents éléments d’un dossier.

Ici, le paramètre -Path nous permet de spécifier le dossier. Il s’agit de la racine du disque c : C:\.

Le paramètre -recurse nous permet d’aller effectuer notre recherche dans les différents sous-dossiers présents dans c:\.

Ensuite, nous passons le contenu du  Get-ChildItem   à la cmdlet  Where-Object   via un pipeline. Nous demandons comme critère de recherche au  Where-Object  de récupérer les champs Length de taille supérieure à 1 GB.

En résumé

  • Les commandes PowerShell sont structurées avec un verbe et un nom.

  • Il existe des commandes pour sélectionner les données (get-*), d’autres pour modifier des données (set-*).

  • Les paramètres permettent de sélectionner des options ou de fournir des entrées.

  • La commande “Get-Help” permet d’accéder à la documentation interne d’une commande.     

  • La pipeline (|) est utilisée pour chaîner les commandes.

  • $_ vous permet de récupérer l’objet de la précédente cmdlet chaînée.       

Les cmdlets n’ont désormais plus de secret pour vous. Vous allez maintenant voir comment mettre des données en mémoire pour les réutiliser dans vos commandes.

Exemple de certificat de réussite
Exemple de certificat de réussite