Est-ce vous avez déjà eu l’impression de passer votre temps à réutiliser les même fonctions custom que vous avez créées dans chacun de vos scripts ?
Et là, vous vous posez la question terrible :
- la version la plus récente/aboutie de ma fonction est dans quelle script ?
- Quels scripts (combien) dois-je mettre à jour pour corriger un bug dans cette fonction que j’utilise tout le temps ?
Et bien cela signifie qu’il est temps pour vous de créer votre propre module PowerShell !
Qu’est-ce qu’un module PowerShell ?
Pour faire simple, un module PowerShell est un ensemble de cmd-let regroupées autour d’un thème, d’un produit ou d’un usage. Le module s’installe dans l’arborescence de PowerShell afin d’être utilisable depuis n’importe quel prompt ou script PowerShell.
Les modules PowerShell sont souvent compilés sous forme de DLL, mais il peuvent aussi être écrits en PowerShell. Leur installation peut être manuelle, mais en général ils sont publiés sur la PowerShell Gallery afin de permettre leur installation automatiquement avec la cmd-let “Install-Module”.
Comment créer son module PowerShell ?
En fait, rien de plus simple 🙂
- On créé un fichier de script PowerShell au format PSM1 dans lequel on va placer nos cmd-let qui ne sont autre que des fonctions écrites en PowerShell
function get-test1 {
return "test1"
}
function get-test2 {
return "test2"
}
- On créé un fichier de description au format PSD1 dans lequel on décrit le module et les cmd-let qui seront accessible dans le module (on peut en masquer certaines pour usage interne)
@{
# Module de script ou fichier de module binaire associé à ce manifeste
RootModule = 'testmodule.psm1'
# Numéro de version de ce module.
ModuleVersion = '1.0.1'
# ID utilisé pour identifier de manière unique ce module
GUID = 'aaaaaaaa-bbbb-cccc-ddddd-eeeeeeeeeeee'
# Auteur de ce module
Author = 'Kevin Oster'
# Société ou fournisseur de ce module
CompanyName = 'Kev-IT'
# Déclaration de copyright pour ce module
Copyright = '(c) 2024 Kevin. All rights reserved.'
# Description de la fonctionnalité fournie par ce module
Description = 'test module'
# Version minimale du moteur Windows PowerShell requise par ce module
PowerShellVersion = '5.0'
# Fonctions à exporter à partir de ce module. Pour de meilleures performances, n’utilisez pas de caractères génériques et ne supprimez pas l’entrée. Utilisez un tableau vide si vous n’avez aucune fonction à exporter.
FunctionsToExport = 'get-test1','get-test2'
}
Comment l’utiliser ?
Méthode 1 : en mode manuel
Aller dans le répertoire des modules PowerShell de votre profil utilisateur (%USERPROFILE%\Documents\WindowsPowerShell\modules) et créez un répertoire au nom de votre module. Placez-y les fichiers du module.
Ensuite vous pouvez l’utiliser dès que vous l’aurez importé avec la commande
import-module <my-module-name>
C’est rapide et efficace, mais pas forcément pratique pour l’industrialisation …
Méthode 2 : via la PowerShell Gallery
Première étape : créer un compte sur la PowerShell Gallery et cliquez sur “Sign in”. Il faudra utiliser un compte Microsoft personnel ou un compte Entra ID d’entreprise.
Seconde étape : créer une clé d’API à partir de votre compte pour uploader le module. Pour cela, il suffit d’aller dans la rubrique API Keys de votre compte et créer une clé.
Troisième étape : uploader votre module PowerShell à l’aide de la commande suivante
Publish-Script -Path <scriptPath> -NuGetApiKey <apiKey>
Et finalement, vous pouvez installer votre script depuis n’importe quelle machine avec la commande
install-module -name modulename
Note : vous pouvez même utiliser votre module depuis un Runbook Azure Automation en installant votre module depuis le portal Azure sur votre Automation Account 🙂 Elle est pas belle la vie ?