Partager via


New-Module

Crée un module dynamique qui existe uniquement en mémoire.

Syntaxe

New-Module
   [-ScriptBlock] <ScriptBlock>
   [-Function <String[]>]
   [-Cmdlet <String[]>]
   [-ReturnResult]
   [-AsCustomObject]
   [-ArgumentList <Object[]>]
   [<CommonParameters>]
New-Module
   [-Name] <String>
   [-ScriptBlock] <ScriptBlock>
   [-Function <String[]>]
   [-Cmdlet <String[]>]
   [-ReturnResult]
   [-AsCustomObject]
   [-ArgumentList <Object[]>]
   [<CommonParameters>]

Description

L’applet New-Module de commande crée un module dynamique à partir d’un bloc de script. Les membres du module dynamique, tels des fonctions et des variables, sont immédiatement disponibles dans la session et restent disponibles jusqu'à la fermeture de la session.

Comme des modules statiques, les applets de commande et les fonctions figurant dans un module dynamique sont exportées par défaut, alors que les variables et les alias ne le sont pas. Toutefois, vous pouvez utiliser l’applet de commande Export-ModuleMember et les paramètres de New-Module remplacement des valeurs par défaut.

Vous pouvez également utiliser le paramètre AsCustomObject pour New-Module renvoyer le module dynamique en tant qu’objet personnalisé. Les membres des modules, tels que les fonctions, sont implémentés en tant que méthodes de script de l'objet personnalisé au lieu d'être importés dans la session.

Les modules dynamiques existent uniquement en mémoire, pas sur le disque. Comme tous les modules, les membres des modules dynamiques s'exécutent dans une étendue de module privée qui est un enfant de l'étendue globale. Get-Module ne peut pas obtenir un module dynamique, mais Get-Command peut obtenir les membres exportés.

Pour rendre un module dynamique disponible Get-Module, dirigez une New-Module commande vers Import-Module ou dirigez l’objet de module qui New-Module revient à Import-Module. Cette action ajoute le module dynamique à la liste de Get-Module, mais elle n’enregistre pas le module sur le disque et ne le rend pas permanent.

Exemples

Exemple 1 : Créer un module dynamique

Cet exemple crée un module dynamique avec une fonction appelée Hello. La commande retourne un objet de module qui représente le nouveau module dynamique.

New-Module -ScriptBlock {function Hello {"Hello!"}}

Name              : __DynamicModule_2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Path              : 2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Description       :
Guid              : 00000000-0000-0000-0000-000000000000
Version           : 0.0
ModuleBase        :
ModuleType        : Script
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {[Hello, Hello]}
ExportedVariables : {}
NestedModules     : {}

Exemple 2 : Utilisation de modules dynamiques et Get-Module et Get-Command

Cet exemple montre que les modules dynamiques ne sont pas retournés par l’applet de Get-Module commande. Les membres qu’ils exportent sont retournés par l’applet de Get-Command commande.

new-module -scriptblock {function Hello {"Hello!"}}

Name              : __DynamicModule_2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Path              : 2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Description       :
Guid              : 00000000-0000-0000-0000-000000000000
Version           : 0.0
ModuleBase        :
ModuleType        : Script
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {[Hello, Hello]}
ExportedVariables : {}
NestedModules     : {}

Get-Module

Get-Command Hello

CommandType     Name   Definition
-----------     ----   ----------
Function        Hello  "Hello!"

Exemple 3 : Exporter une variable dans la session active

Cet exemple utilise l’applet Export-ModuleMember de commande pour exporter une variable dans la session active. Sans la Export-ModuleMember commande, seule la fonction est exportée.

New-Module -ScriptBlock {$SayHelloHelp="Type 'SayHello', a space, and a name."; function SayHello ($name) { "Hello, $name" }; Export-ModuleMember -function SayHello -Variable SayHelloHelp}
$SayHelloHelp

Type 'SayHello', a space, and a name.

SayHello Jeffrey

Hello, Jeffrey

La sortie indique que la variable et la fonction ont été exportées dans la session.

Exemple 4 : Rendre un module dynamique disponible pour Get-Module

Cet exemple montre que vous pouvez rendre un module dynamique disponible en Get-Module pipi le module dynamique vers Import-Module.

New-Module crée un objet de module dirigé vers l’applet de Import-Module commande. Le paramètre Name d’assigne New-Module un nom convivial au module. Étant donné que Import-Module ne retourne aucun objet par défaut, il n’existe aucune sortie de cette commande. Get-Moduleque greetingModule a été importé dans la session active.

New-Module -ScriptBlock {function Hello {"Hello!"}} -name GreetingModule | Import-Module
Get-Module

Name              : GreetingModule
Path              : d54dfdac-4531-4db2-9dec-0b4b9c57a1e5
Description       :
Guid              : 00000000-0000-0000-0000-000000000000
Version           : 0.0
ModuleBase        :
ModuleType        : Script
PrivateData       :
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {[Hello, Hello]}
ExportedVariables : {}
NestedModules     : {}

Get-Command hello

CommandType     Name                                                               Definition
-----------     ----                                                               ----------
Function        Hello                                                              "Hello!"

L’applet Get-Command de commande affiche la Hello fonction que le module dynamique exporte.

Exemple 5 : Générer un objet personnalisé qui a des fonctions exportées

Cet exemple montre comment utiliser le paramètre AsCustomObject pour New-Module générer un objet personnalisé qui a des méthodes de script qui représentent les fonctions exportées.

L’applet New-Module de commande crée un module dynamique avec deux fonctions et Hello Goodbye. Le paramètre AsCustomObject crée un objet personnalisé au lieu de l’objet PSModuleInfo généré New-Module par défaut. Cet objet personnalisé est enregistré dans la $m variable. La $m variable semble ne pas avoir de valeur affectée.

$m = New-Module -ScriptBlock {
  function Hello ($name) {"Hello, $name"}
  function Goodbye ($name) {"Goodbye, $name"}
} -AsCustomObject
$m
$m | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
Goodbye     ScriptMethod System.Object Goodbye();
Hello       ScriptMethod System.Object Hello();

$m.goodbye("Jane")

Goodbye, Jane

$m.hello("Manoj")

Hello, Manoj

La piping vers l’applet Get-Member de $m commande affiche les propriétés et méthodes de l’objet personnalisé. La sortie indique que l’objet a des méthodes de script qui représentent les fonctions et Goodbye les Hello fonctions. Enfin, nous appelons ces méthodes de script et affichons les résultats.

Exemple 6 : Obtenir les résultats du bloc de script

Cet exemple utilise le paramètre ReturnResult pour demander les résultats de l’exécution du bloc de script au lieu de demander un objet de module. Le bloc de script dans le nouveau module définit la SayHello fonction, puis appelle la fonction.

New-Module -ScriptBlock {function SayHello {"Hello, World!"}; SayHello} -ReturnResult

Hello, World!

Paramètres

-ArgumentList

Spécifie un tableau d’arguments qui sont des valeurs de paramètre passées au bloc de script. Pour plus d’informations sur le comportement d’ArgumentList, consultez about_Splatting.

Type:Object[]
Alias:Args
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-AsCustomObject

Indique que cette applet de commande retourne un objet personnalisé qui représente le module dynamique. Les membres de module sont implémentés en tant que méthodes de script de l'objet personnalisé, mais ils ne sont pas importés dans la session. Vous pouvez enregistrer l'objet personnalisé dans une variable et utiliser la notation par points pour appeler les membres.

Si le module a plusieurs membres portant le même nom, par exemple une fonction et une variable nommée A, un seul membre portant chaque nom est accessible à partir de l’objet personnalisé.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Cmdlet

Spécifie un tableau d’applets de commande que cette applet de commande exporte à partir du module dans la session active. Entrez la liste des applets de commandes, séparées par des virgules. Les caractères génériques sont autorisés. Par défaut, toutes les applets de commande du module sont exportées.

Vous ne pouvez pas définir des applets de commande dans un bloc de script, mais un module dynamique peut inclure des applets de commande s'il importe les applets de commande à partir d'un module binaire.

Type:String[]
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Function

Spécifie un tableau de fonctions que cette applet de commande exporte du module dans la session active. Entrez la liste des fonctions, séparées par des virgules. Les caractères génériques sont autorisés. Par défaut, toutes les fonctions définies dans un module sont exportées.

Type:String[]
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:True

-Name

Spécifie un nom pour le nouveau module. Vous pouvez également diriger un nom de module vers New-Module.

La valeur par défaut est un nom généré automatiquement qui commence __DynamicModule_ par un GUID qui spécifie le chemin d’accès du module dynamique.

Type:String
Position:0
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:True
Accepter les caractères génériques:False

-ReturnResult

Indique que cette applet de commande exécute le bloc de script et retourne les résultats du bloc de script au lieu de renvoyer un objet de module.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-ScriptBlock

Spécifie le contenu du module dynamique. Placez le contenu dans les accolades ({}) pour créer un bloc de script. Ce paramètre est obligatoire.

Type:ScriptBlock
Position:1
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

Entrées

String

Vous pouvez diriger un nom de module vers cette applet de commande.

Sorties

PSModuleInfo

Cette applet de commande génère un objet PSModuleInfo par défaut.

PSCustomObject

Si vous utilisez le paramètre AsCustomObject , il génère un objet PSCustomObject .

Object

Si vous utilisez le paramètre ReturnResult , cette applet de commande retourne le résultat de l’évaluation du bloc de script dans le module dynamique.

Notes

Windows PowerShell inclut les alias suivants pour New-Module:

  • nmo

Vous pouvez également faire référence à New-Module son alias. nmo Pour plus d’informations, consultez about_Aliases.