{{tag>dev powershell module}} ====== Powershell : Créer un module ====== ===== Le fichier Manifest ===== Le fichier manifeste de module est un fichier de données PowerShell avec l'extension ''.psd1''. Il contient une simple table de hachage. Les paires clé-valeur dans la table de hachage permettent de : * Décrire le contenu et les attributs du module ; * Définir les prérequis au fonctionnement du module ; * Contrôler la façon dont les composants sont traités. Une bonne pratique consiste à générer le fichier manifest du module via la cmdlet **New-ModuleManifest**. L'appel sans paramètre permet de créer une table de hachage minimale : New-ModuleManifest -Path C:\My.Module.Name.psd1 -ModuleVersion "2.0" -Author "YourNameHere" On peut définir les valeurs des arguments dans une table de hash puis appeler la cmdlet : # Définition des paramètres $module_properties = @{ RootModule = '.\aScriptExample.psm1' ModuleVersion = '0.0.0.1' GUID = New-Guid | Select-Object -ExpandProperty Guid Author = 'anAuthorName' CompanyName = 'aCompanyName' Description = "a module short description" PowerShellVersion = '5.1' FunctionsToExport = @("aFunction1", "aFunction2", "aFunction3") CmdletsToExport = @() AliasesToExport = @() VariablesToExport = @('$aVarName1', '$aVarName2') } New-ModuleManifest -Path .\My.Module.Name.psd1 @module_properties ===== Nom de module ====== Sans fichier manifest, le nom du module correspond au nom du fichier .psm1 ===== Tester le module manifest ===== La cmdlet **Test-ModuleManifest** permet de vérifier la syntaxe du fichier module manifest : Test-ModuleManifest .\Phobos.Epsilon.filehash.psd1 ===== Sélection des objets à exporter ===== Fonctions, alias et variables doivent être sélectionnés pour être exportés : * Depuis le script ; * Depuis le fichier manifest. Dans le script on utilise la cmdlet **Export-ModuleMember** Export-ModuleMember -Function Get-Test, New-Test, Start-Test -Alias gtt, ntt, stt -Variable aVarName Depuis la table de hachage du fichier manifest, on renseigne la valeur de la clé **VariablesToExport** @{ # Par défaut toutes les variables sont exportés. Ici on définit # Précisément les variables qu'on souhaite exporter. VariablesToExport = @('$aVarName1', '$aVarName2') } ===== Charger le module ===== Pour charger le module dans la session active : Import-Module .\aModuleName.psd1 Ce chargement dynamique est éphémère et ne concerne que le shell en cours d'exécution. Pour que le module soit chargé automatiquement lors du lancement de Powershell, il doit être installé voir la note . ===== Décharger le module ===== Remove-Module aModuleName ===== Obtenir la version depuis le module ===== Il est possible d'obtenir le nom du module et sa version depuis l'intérieur du module : ces valeurs sont accessibles en lecture seule : ($MyInvocation.MyCommand.ScriptBlock.Module.Name) source : https://stackoverflow.com/questions/27236337/is-it-possible-to-set-powershell-module-name-version-without-using-a-manifest ===== Références ===== * [[https://learn.microsoft.com/en-us/powershell/scripting/developer/module/how-to-write-a-powershell-script-module?view=powershell-5.1|Ecrire un module Powershell (Microsoft Learn)]] * [[https://learn.microsoft.com/fr-fr/powershell/scripting/developer/module/how-to-write-a-powershell-module-manifest?view=powershell-5.1|Ecrire un fichier manifest pour un module Powershell (Microsoft Learn)]] * [[https://learn.microsoft.com/fr-fr/powershell/module/microsoft.powershell.core/about/about_module_manifests?view=powershell-5.1|A propos du fichier module manifest (Microsoft Learn)]] * [[https://learn.microsoft.com/fr-fr/powershell/scripting/dev-cross-plat/performance/module-authoring-considerations?view=powershell-5.1|Bonnes pratiques pour la création de module (Microsoft Learn)]]