Outils pour utilisateurs

Outils du site


dev:powershell:ecrire_un_module_powershell

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
dev:powershell:ecrire_un_module_powershell [2023/08/23 10:40] – supprimée - modification externe (Date inconnue) 127.0.0.1dev:powershell:ecrire_un_module_powershell [2023/08/27 12:25] (Version actuelle) yoann
Ligne 1: Ligne 1:
 +{{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 :
 +
 +<code powershell>
 +New-ModuleManifest -Path C:\My.Module.Name.psd1 -ModuleVersion "2.0" -Author "YourNameHere"
 +</code>
 +
 +On peut définir les valeurs des arguments dans une table de hash puis appeler la cmdlet :
 +
 +<code powershell>
 +# 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
 +</code>
 +
 +
 +===== 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 :
 +<code powershell>
 +Test-ModuleManifest .\Phobos.Epsilon.filehash.psd1
 +</code>
 +
 +===== 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**
 +
 +<code powershell>
 +Export-ModuleMember -Function Get-Test, New-Test, Start-Test -Alias gtt, ntt, stt -Variable aVarName
 +</code>
 +
 +Depuis la table de hachage du fichier manifest, on renseigne la valeur de la clé **VariablesToExport**
 +
 +<code powershell>
 +@{
 +  # 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')
 +
 +</code>
 +
 +
 +===== Charger le module =====
 +
 +Pour charger le module dans la session active : 
 +<code powershell>
 +Import-Module .\aModuleName.psd1
 +</code>
 +
 +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 =====
 +
 +<code powershell>
 +Remove-Module aModuleName
 +</code>
 +
 +===== 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 :
 +
 +<code powershell>
 +($MyInvocation.MyCommand.ScriptBlock.Module.Name)
 +</code>
 +
 +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)]]