PowerShell : utiliser une bibliothèque de fonctions avancées

Après avoir vu ensemble comment créer une fonction avancée, je vous invite à me suivre dans la mise en place d’une bibliothèque de fonctions. Toujours dans l’objectif de l’utiliser en amont d’un script, nous verrons comment développer un module bibliothèque, comment l’importer dans un script et comment l’utiliser. Pour ce faire, notre script sera chargé d’afficher le contenu d’un fichier de configuration (hosts) à l’écran si l’utilisateur le demande.

Création de la bibliothèque

Les bibliothèques sont tout simplement des fichiers PowerShell avec l’extension PSM1 (M pour Module). Ces fichiers contiennent les fonctions que vous souhaitez charger dans un script ou dans votre environnement PowerShell en utilisant la commande import-module. Chaque fonction, pour être utilisable, doit être signalée dans le fichier module via la commande Export-ModuleMember. Pour créer notre bibliothèque, créez le fichier biblio-01.psm1 et ouvrez-le avec PowerShell ISE ou tout autre éditeur de votre choix. Ensuite, prenez le temps de commenter votre fichier : cela permet de mieux se souvenir de la raison d’être de cette bibliothèque, de ce qu’elle contient, …

 

Ajouter une fonction avancée

Pour ajouter une fonction dans la bibliothèque, il suffit de l’écrire comme d’habitude, puis de l’exporter avec la commande Export-ModuleMember ; commençons par écrire une fonction qui vous demande de répondre par oui ou non et retourne l’information ainsi obtenue :

 

Tester la fonction

Toute fonction mérite d’être correctement testée, pour cela il n’est pas nécessaire de se compliquer la vie en écrivant un script qui appelle la bibliothèque puis teste la fonction : vous pouvez le faire directement depuis PowerShell. Premièrement, placez-vous au niveau de votre module, ensuite utilisez la commande import-module pour charger en mémoire les fonctions. Enfin, appeler votre fonction et testez-là !

Tout d’abord, charger le module et vérifier que la fonction est présente en affichant l’aide :

 

Ensuite, testé les différents cas de figure Oui et Non.

 

 

Pour éliminer l’affichage du chargement de system.reflection.assembly, je modifie la ligne 31 du code :

$Trash = [system.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

 

Pour que la modification soit appliquée, il faut décharger puis recharger le module de la mémoire : pour cela, on utilise la commande remove-module puis import-module :

 

Ecrire le script

La fonction est prête et le fichier module fonctionne : il ne nous reste plus qu’à écrire notre script. Tout comme en ligne de commande, les modules s’importent avec import-module et se retire avec remove-module. Personnellement, je décharge toujours mes modules à la fin d’un script : cela simplifie le travail de test et validation lors du développement. Voici le script qui permet d’afficher le fichier HOSTS sur demande :

 

Et voilà ! Testons le résultat :

 

 

Conclusion

Avec ce petit exemple, vous serez capable de créer des bibliothèques de fonctions que vous pourrez réutiliser à loisir dans vos scripts PowerShell ou dans vos sessions PS. Avant de développer une fonction, prenez bien le temps de réfléchir à ses éléments de sortie : une fonction devrait au maximum éviter d’être spécifique à un contexte client, cela lui fait perdre de la valeur lorsqu’il faut la réutiliser (modification du code, etc…). bon codage à tous !

Lien Permanent pour cet article : https://ms-sec.fr/?p=867

(3 commentaires)

    • Phil31k on 16 octobre 2017 at 10 h 22 min
    • Répondre

    https://i0.wp.com/blog.ms-sec.fr/wp-content/uploads/2016/08/081316_0721_PowerShellu10.png

    donne : “We cannot complete this request, remote data could not be fetched”

    Toutes les images stockées sur ce serveur ne sont visiblement plus disponibles.

    Dommage :'(

    1. C’est juste, il y a eu un problème et je n’ai pas encore eu le temps de remettre les captures. Mais je compte bien le faire rapidement 🙂

      1. Et voilà. Les images sont de retour 🙂

Laisser un commentaire

Votre adresse ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.