Outils pour utilisateurs

Outils du site


dev:powershell:fonction_et_module

PowerShell : Fonctions et modules

Lorsqu'on produit du code on peut avoir envie ou besoin de :

  • Réutiliser une même séquence d' instructions plusieurs fois dans un script ;
  • Réutiliser des traitements dans un autre contexte.

Les fonctions

Une fonctions est un bloc de code réutilisable. Plutôt que d'écrire à différents endroits la même séquence d'instructions, il est préférable d'utiliser une fonction. Elle est définie une fois puis appelée autant de fois que nécessaire par le script. Cette factorisation du code est un élément clé pour la lisibilité, le débogage et la maintenance.

Ci-dessous la syntaxe de définition d'une fonction en PowerShell :

# Définition d'une fonction nommée "Get-SecurityEvent()"
# Acceptant un paramètre de type entier
Function Get-SecurityEvent {
    Param( [int] $Last )
    Get-EventLog Security -Newest $Last
 
    # Valeurs à retourner (optionnel)
    Return($values)
}

La note utilisation des paramètres détaille l'usage de l'instruction Param().

Pour appeler la fonction dans le script, utiliser la syntaxe :

Get-SecurityEnvent -Last 30
On peut écrire l'aide associée à la fonction via les commentaires : voir la note Powershell : aide basée sur les commentaires.

Les fonctions dans les modules peuvent inclure une aide basée sur des commentaires, détectable à l’aide de la cmdlet Get-Help. Pour cela, vous devez inclure les informations d’aide dans chaque fonction.

Portée des variables

3 portées distinctes existent :

Global Variables accessibles dans l'invite PowerShell et les processus fils.
Script Variables accessibles dans le script courant et les fonctions. Une variable de portée Script masque la valeur d'une variable de portée Global de même nom.
Fonction Limitée à la seule fonction.

Les Modules

Les modules permettent de regrouper des fonctions et des variables afin de les partager entre plusieurs scripts ou de distribuer du code.

  • Les fichiers modules doivent avoir l'extension psd1 ou psm1
  • Les modules présents dans $env:PSModulePath sont chargés automatiquement, les fonctions placées dans les modules peuvent être invoquées comme des applets ;
  • Les modules ne doivent pas être directement placés dans les répertoires déclarées par $env:PSModulePath. Il doivent avoir un sous-dossier portant le même nom que le fichier .psm1.
# Crée un répertoire pour le module
New-Item -ItemType Directory -Path .\Custom-Message
 
# Créer un fichier module
Set-Location .\Write-BlueMessage\
New-Item -ItemType File -Path .\Custom-Message.psm1

Ci-dessous le contenu du module

Custom-Message.psm1
# Fonction : Write-BlueMessage
# Description : Affiche un message de couleur bleue
# Args : Msg : Le message à  afficher
 
Function Write-BlueMessage{
        Param( [Parameter(Mandatory,helpMessage='Message to display')] [String] $Msg )
 
        Write-Host -ForegroundColor Blue "$Msg"
}

Une fois le module créé, il peut être chargé via la cmdlet Import-Module

Import-Module .\Custom-Message.psm1
 
# Après import la fonction peut être invoquée
Write-BlueMessage -Msg "Hello World !!!"

Dot sourcing

Le dot sourcing est une méthode d'importation d'un autre script dans la portée actuelle.

Normalement les fonctions définies dans un fichier de script sont supprimées de la mémoire lorsque le script se termine. Avec le “dot sourcing” les fonctions restent en mémoire et vous pouvez les utiliser dans l'environnement courant : le script courant ou l’invite de commande de Windows PowerShell.

# Chargement d'un script via dot sourcing
. .\aScriptFile.ps1

L’appel “dot sourcing” peut charger un fichier local ou une ressource réseau à l’aide d’un chemin UNC.

Par le passé, le dot sourcing était la seule méthode permettant de gérer un référentiel centralisé de fonctions réutilisables. A présent les modules constituent une méthode préférable et standardisée pour la gestion des fonctions entre plusieurs scripts.

Références

dev/powershell/fonction_et_module.txt · Dernière modification : 2023/08/22 11:13 de yoann