Scripts PowerShell : les quatre cmdlets essentielles

Avec ses cmdlets, PowerShell propose un langage puissant qui permet d’associer des commandes pour créer des scripts complexes. Notre formateur vous présente les quatre cmdlets les plus importantes et vous montre comment automatiser vos tâches routinières.

Auteur / Autrice Raúl B. Heiduk
Date 04.07.2023
Temps de lecture 8 Minutes

Les cmdlets, qu’est-ce que c’est ?

PowerShell possède de nombreuses commandes intégrées : les cmdlets (prononcé : commandlettes). Une cmdlet est toujours composée d’un verbe, d’un substantif (au singulier) et d’une liste de paramètres. Cette syntaxe est cohérente, c’est-à-dire que si vous avez assimilé cette base, vous êtes capable de comprendre son cadre d’application et écrire vous-même des scripts PowerShell.

Je peux même vous garantir que vous écrirez même rapidement et sans grands efforts des scripts complexes. En effet, la touche tab de votre clavier est une véritable « baguette magique » : en une seule pression de cette touche, PowerShell propose des commandes complètes alors que vous ne les avez même pas encore écrites.

PowerShell reconnaît également les commandes DOS, ce qui devrait au premier abord réjouir tout amateur ou toute amatrice du DOS. Cependant : ces dernières fournissent du texte pur, que l’on peut certes lire, mais pas traiter.

Les cmdlets sont différentes : elles ne proposent pas de texte pur en sortie, mais des objets. On n’a pas seulement accès à leurs différentes propriétés (taille, nom, date de modification), mais on peut également appliquer différentes méthodes (ouvrir, fermer, copier, supprimer). Ainsi, les commandes PowerShell présentent une plus-value conséquente par rapport aux commandes DOS.

Les 4+1 cmdlets indispensables

PowerShell propose plus de 100 cmdlets essentielles et vous pouvez écrire et partager vos propres cmdlets. Afin de pouvoir écrire des scripts sur PowerShell, vous devriez connaitre les quatre cmdlets suivantes :

1 « get-member »

La cmdlet « get-member » est celle dont vous aurez besoin si vous voulez obtenir les propriétés et les méthodes des objets. Vous devez combiner cette cmdlet avec la commande qui permet de spécifier l’objet. Par exemple :

get-date | get-member

Dans ce cas, la barre verticale signifie « transmettre ». En exécutant ce scripte, vous obtiendrez toutes les propriétés qui sont répertoriées dans l’objet « date ».

2 « get-command »

Avec la cmdlet « get-command », vous pouvez consulter toutes les commandes installées sur l’ordinateur. Vous pouvez utiliser des caractères génériques (Wildcards) pour limiter la recherche, par exemple aux commandes qui commencent par la lettre i :

get-command *i

3 +1 « get-help » et « update help »

Si vous avez besoin d’aide à propos d’une cmdlet, c’est avec « get-help » que vous l’obtiendrez. Faites cependant attention, l’aide n’est pas encore installée à l’ouverture du système d’exploitation. C’est pourquoi vous aurez besoin tout d’abord de la commande supplémentaire « update help ». Si vous avez besoin d’aide pour un serveur qui n’est pas connecté à internet, pensez à enregistrer l’aide localement. Appelez ensuite l’aide pour une cmdlet, par exemple :

Get help | get-date

L’aide qui s’affiche n’est pas toujours facile à comprendre, c’est pourquoi il peut être utile de demander un exemple :

Get help | get-date - exemple

4 « select-object * »

Grâce à la cmdlet « select-object », vous pouvez sélectionner les propriétés d’un objet choisi. Ainsi, vous pouvez limiter une recherche. Vous pouvez par exemple chercher des valeurs de propriétés qui commencent avec la lettre d et finissent avec la lettre e :

get-date | select-object d*e

Comment créer des automatisations avec des cmdlets

Vous pouvez maintenant créer facilement des automatisations pour des tâches précises grâce aux cmdlets. Par exemple, vous pouvez démarrer automatiquement tous les services dont le type de démarrage est paramétré sur « automatique », mais qui n’ont pas encore été démarrés.

Commencez par chercher la propriété nécessaire :

get-service | get-member

Dans les listes affichées, vous constaterez que la propriété nécessaire s’appelle « StartType ». Cherchez maintenant la bonne désignation du statut « automatique » :

get-service | select-object

Dans les résultats de recherche, vous trouverez rapidement le statut « automatique ». Listez maintenant tous les services dont la propriété « StartType » possède le statut « automatique ». Pour ce faire, vous aurez besoin de la cmdlet fréquemment utilisée « where-object » ainsi que la syntaxe suivante, je l’avoue, pas très simple :

get-service | where-object {$_.StartType -eq «automatic»}

Avec cette commande (« eq » représente « equal » (égal)), vous obtiendrez tous les services dont le type de démarrage est paramétré sur « automatique ». Vous devrez néanmoins encore restreindre ces services, car ceux qui vous intéressent sont ceux qui ne sont pas démarrés, donc qui sont « not equal running ».

get-service | where-object {$_.StartType -eq «automatic» _and $_.Status _ne «running»}

Grâce à ce script, vous obtiendrez tous les services qui possèdent le statut « automatique » à la propriété « StartType », mais qui ne sont pas exécutés actuellement. Utilisez maintenant la cmdlet « start-service » pour résoudre ce problème :

get-service | where-object {$_.StartType -eq «automatic» _and $_.Status _ne «running»} | start-service

Et voilà, vous avez résolu le problème avec cette simple ligne !

Créer une cmdlet personnalisée

Vous pouvez maintenant écrire votre propre cmdlet à partir du script que vous venez d’écrire. Pour cela, copiez le script dans l’éditeur. Précisez avant la commande qu’il s’agit d’une nouvelle fonction et donnez-lui un nom pertinent :

function Start-AllStoppedAutoService

Sauvegardez ce texte, par exemple sous le nom de « MyModules-psm1 ». Il doit être enregistré dans le dossier prévu pour les modules PowerShell (p. ex. C : \Windows\System32\Windows PowerShell\v1.0\Modules).

Insérez ici un nouveau répertoire pour vos modules. Il faut cependant que le nom du répertoire corresponde aux noms des fichiers psm1 qu’il contient, dans notre cas : « MyModules ».

Vous avez ainsi ajouté un module à PowerShell. Ce nouveau script est maintenant dans votre liste contenant toutes les cmdlets.

Lire aussi : Pourquoi tous les administrateurs système devraient maîtriser PowerShell

Devenez expert de PowerShell avec Digicomp

Découvrez PowerShell et professionnalisez-vous dans l’écriture de scripts PowerShell grâce à nos formations interactives et pratiques. Peu importe votre niveau, nous avons la formation qui correspond à votre niveau et vos besoins :

 

Découvrez PowerShell et professionnalisez-vous dans l’écriture de scripts PowerShell grâce à nos formations interactives et pratiques. Peu importe votre niveau, nous avons la formation qui correspond à votre niveau et vos besoins :

 


Auteur / Autrice

Raúl B. Heiduk

Raùl B. Heiduk est ingénieur diplômé (HES) et spécialiste Microsoft certifié (MCP, MCSA, MCES, MCT, MCTS, MCITP, MCD). Ses domaines d’expertise comprennent l’architecture système et réseau, les solutions collaboratives, empaquetage et distribution de logiciels, rédaction de scripts et automatisation. Depuis de nombreuses années, il transmet ses connaissances et sa riche expérience en tant que formateur chez Digicomp.