Recherche…


Introduction

À partir de PowerShell version 2.0, les développeurs peuvent créer des modules PowerShell. Les modules PowerShell encapsulent un ensemble de fonctionnalités communes. Par exemple, il existe des modules PowerShell spécifiques aux fournisseurs qui gèrent différents services de cloud. Il existe également des modules PowerShell génériques qui interagissent avec les services de médias sociaux et effectuent des tâches de programmation courantes, telles que l'encodage Base64, l'utilisation de canaux nommés, etc.

Les modules peuvent exposer des alias de commandes, des fonctions, des variables, des classes, etc.

Créer un manifeste de module

@{
  RootModule = 'MyCoolModule.psm1'
  ModuleVersion = '1.0'
  CompatiblePSEditions = @('Core')
  GUID = '6b42c995-67da-4139-be79-597a328056cc'
  Author = 'Bob Schmob'
  CompanyName = 'My Company'
  Copyright = '(c) 2017 Administrator. All rights reserved.'
  Description = 'It does cool stuff.'
  FunctionsToExport = @()
  CmdletsToExport = @()
  VariablesToExport = @()
  AliasesToExport = @()
  DscResourcesToExport = @()
}

Chaque bon module PowerShell possède un manifeste de module. Le manifeste du module contient simplement des métadonnées sur un module PowerShell et ne définit pas le contenu réel du module.

Le fichier manifeste est un fichier de script PowerShell, avec une extension de fichier .psd1 , qui contient une table de hachage. La table de hachage dans le manifeste doit contenir des clés spécifiques, afin que PowerShell puisse l’interpréter correctement en tant que fichier de module PowerShell.

L'exemple ci-dessus fournit une liste des clés HashTable principales qui constituent un manifeste de module, mais il en existe bien d'autres. La commande New-ModuleManifest vous aide à créer un nouveau squelette de manifeste de module.

Exemple de module simple

function Add {
  [CmdletBinding()]
  param (
    [int] $x
  , [int] $y
  )

  return $x + $y
}

Export-ModuleMember -Function Add

Voici un exemple simple de ce à quoi un fichier de module de script PowerShell peut ressembler. Ce fichier s'appellera MyCoolModule.psm1 et sera référencé à partir du fichier manifeste du module (.psd1). Vous remarquerez que la commande Export-ModuleMember nous permet de spécifier les fonctions du module que nous voulons "exporter" ou exposer à l'utilisateur du module. Certaines fonctions seront exclusivement internes et ne devraient pas être exposées. Export-ModuleMember seraient donc omises lors de l'appel à Export-ModuleMember .

Exportation d'une variable à partir d'un module

$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName

Pour exporter une variable depuis un module, utilisez la commande Export-ModuleMember , avec le paramètre -Variable . Rappelez-vous cependant que si la variable n'est pas explicitement exportée dans le fichier manifeste du module (.psd1), la variable ne sera pas visible pour le consommateur du module. Considérez le module comme un "gatekeeper". Si une fonction ou une variable n'est pas autorisée dans le manifeste du module, elle ne sera pas visible pour le consommateur du module.

Remarque: L' exportation d'une variable est similaire à la création d'un champ dans une classe publique. Ce n'est pas conseillé. Il serait préférable d'exposer une fonction pour obtenir le champ et une fonction pour définir le champ.

Structuration des modules PowerShell

Plutôt que de définir toutes vos fonctions dans un seul fichier de module de script .psm1 PowerShell, vous souhaiterez peut-être séparer votre fonction en fichiers individuels. Vous pouvez ensuite doter en source ces fichiers de votre fichier de module de script, qui les traite essentiellement comme s'ils faisaient partie du fichier .psm1 lui-même.

Considérez cette structure de répertoire de module:

\MyCoolModule
  \Functions
    Function1.ps1
    Function2.ps1
    Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1

Dans votre fichier MyCoolModule.psm1 , vous pouvez insérer le code suivant:

Get-ChildItem -Path $PSScriptRoot\Functions | 
  ForEach-Object -Process { . $PSItem.FullName }

Cela source-dot les fichiers de fonction individuels dans le fichier de module .psm1 .

Emplacement des modules

PowerShell recherche les modules dans les répertoires répertoriés dans $ Env: PSModulepath.

Un module appelé foo , dans un dossier appelé foo sera trouvé avec Import-Module foo

Dans ce dossier, PowerShell recherchera un manifeste de module (foo.psd1), un fichier de module (foo.psm1), une DLL (foo.dll).

Visibilité du membre du module

Par défaut, seules les fonctions définies dans un module sont visibles en dehors du module. En d'autres termes, si vous définissez des variables et des alias dans un module, ils ne seront pas disponibles sauf dans le code du module.

Pour remplacer ce comportement, vous pouvez utiliser la cmdlet Export-ModuleMember . Il a des paramètres appelés -Function , -Variable et -Alias qui vous permettent de spécifier exactement quels membres sont exportés.

Il est important de noter que si vous utilisez Export-ModuleMember , seuls les éléments que vous spécifiez seront visibles.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow