Compartir a través de


New-Module

Crea un módulo dinámico que solo existe en memoria.

Sintaxis

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

El New-Module cmdlet crea un módulo dinámico a partir de un bloque de script. Los miembros del módulo dinámico, como las funciones y las variables, están inmediatamente disponibles en la sesión y permanecen disponibles hasta que cierre la sesión.

Al igual que sucede con los módulos estáticos, de forma predeterminada, los cmdlets y las funciones de un módulo dinámico se exportan, lo cual no sucede con las variables y los alias. Sin embargo, puede usar el cmdlet Export-ModuleMember y los parámetros de New-Module para invalidar los valores predeterminados.

También puede usar el parámetro AsCustomObject de New-Module para devolver el módulo dinámico como un objeto personalizado. Los miembros de los módulos, como es el caso de las funciones, se implementan como métodos de script del objeto personalizado en lugar de importarse en la sesión.

Los módulos dinámicos solo existen en la memoria, no en el disco. Al igual que todos los módulos, los miembros de los módulos dinámicos se ejecutan en un ámbito de módulo privado que es un elemento secundario del ámbito global. Get-Module no puede obtener un módulo dinámico, pero Get-Command puede obtener los miembros exportados.

Para que un módulo dinámico esté disponible para Get-Module, canalice un New-Module comando a Import-Module o canalice el objeto de módulo que New-Module vuelve a Import-Module. Esta acción agrega el módulo dinámico a la lista Get-Module, pero no guarda el módulo en el disco ni lo hace persistente.

Ejemplos

Ejemplo 1: Creación de un módulo dinámico

En este ejemplo se crea un nuevo módulo dinámico con una función denominada Hello. El comando devuelve un objeto de módulo que representa el nuevo módulo dinámico.

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     : {}

Ejemplo 2: Trabajar con módulos dinámicos y Get-Module y Get-Command

En este ejemplo se muestra que el Get-Module cmdlet no devuelve los módulos dinámicos. El cmdlet devuelve los miembros que exportan Get-Command .

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!"

Ejemplo 3: Exportación de una variable a la sesión actual

En este ejemplo se usa el Export-ModuleMember cmdlet para exportar una variable a la sesión actual. Sin el Export-ModuleMember comando , solo se exporta la función .

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

El resultado muestra que tanto la variable como la función se exportaron en la sesión.

Ejemplo 4: Hacer que un módulo dinámico esté disponible para Get-Module

En este ejemplo se muestra que puede hacer que un módulo dinámico esté disponible Get-Module canalizando el módulo dinámico a Import-Module.

New-Module crea un objeto de módulo que se canaliza al Import-Module cmdlet . El parámetro Name de New-Module asigna un nombre descriptivo al módulo. Dado que Import-Module no devuelve ningún objeto de forma predeterminada, no hay ninguna salida de este comando. Get-Moduleque greetingModule se ha importado a la sesión actual.

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!"

El Get-Command cmdlet muestra la Hello función que exporta el módulo dinámico.

Ejemplo 5: Generación de un objeto personalizado que tiene funciones exportadas

En este ejemplo se muestra cómo usar el parámetro AsCustomObject de New-Module para generar un objeto personalizado que tenga métodos de script que representen las funciones exportadas.

El New-Module cmdlet crea un módulo dinámico con dos funciones y Hello Goodbye. El parámetro AsCustomObject crea un objeto personalizado en lugar del objeto PSModuleInfo que New-Module genera de forma predeterminada. Este objeto personalizado se guarda en la $m variable . La $m variable parece no tener ningún valor asignado.

$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 canalización $m al Get-Member cmdlet muestra las propiedades y los métodos del objeto personalizado. La salida muestra que el objeto tiene métodos de script que representan las Hello funciones y Goodbye . Por último, llamamos a estos métodos de script y se muestran los resultados.

Ejemplo 6: Obtención de los resultados del bloque de script

En este ejemplo se usa el parámetro ReturnResult para solicitar los resultados de ejecutar el bloque de script en lugar de solicitar un objeto de módulo. El bloque de script del nuevo módulo define la SayHello función y, a continuación, llama a la función .

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

Hello, World!

Parámetros

-ArgumentList

Especifica una matriz de argumentos que son valores de parámetro que se pasan al bloque de script. Para obtener más información sobre el comportamiento de ArgumentList, vea about_Splatting.

Tipo:Object[]
Alias:Args
Posición:Named
Valor predeterminado:None
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-AsCustomObject

Indica que este cmdlet devuelve un objeto personalizado que representa el módulo dinámico. Los miembros de módulo se implementan como métodos de script del objeto personalizado, pero no se importan en la sesión. Puede guardar el objeto personalizado en una variable y usar la notación de punto para invocar a los miembros.

Si el módulo tiene varios miembros con el mismo nombre, como una función y una variable denominada A, solo se puede tener acceso a un miembro con cada nombre desde el objeto personalizado.

Tipo:SwitchParameter
Posición:Named
Valor predeterminado:None
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-Cmdlet

Especifica una matriz de cmdlets que este cmdlet exporta desde el módulo a la sesión actual. Escriba una lista separada por comas de cmdlets. Se permite el uso de caracteres comodín. De forma predeterminada se exportan todos los cmdlets del módulo.

No se pueden definir cmdlets en un bloque de script, pero un módulo dinámico puede incluir cmdlets si los importa desde un módulo binario.

Tipo:String[]
Posición:Named
Valor predeterminado:None
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-Function

Especifica una matriz de funciones que este cmdlet exporta desde el módulo a la sesión actual. Escriba una lista separada por comas de funciones. Se permite el uso de caracteres comodín. De forma predeterminada se exportan todas las funciones definidas en un módulo.

Tipo:String[]
Posición:Named
Valor predeterminado:None
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:True

-Name

Especifique un nombre para el nuevo módulo. También se puede canalizar el nombre de un módulo a New-Module.

El valor predeterminado es un nombre generado automáticamente que comienza por __DynamicModule_ y va seguido de un GUID que especifica la ruta de acceso del módulo dinámico.

Tipo:String
Posición:0
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:False

-ReturnResult

Indica que este cmdlet ejecuta el bloque de script y devuelve los resultados del bloque de script en lugar de devolver un objeto de módulo.

Tipo:SwitchParameter
Posición:Named
Valor predeterminado:None
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-ScriptBlock

Especifica el contenido del módulo dinámico. Incluya el contenido entre llaves ({}) para crear un bloque de script. Este parámetro es obligatorio.

Tipo:ScriptBlock
Posición:1
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

Entradas

String

Puede canalizar un nombre de módulo a este cmdlet.

Salidas

PSModuleInfo

Este cmdlet genera un objeto PSModuleInfo de forma predeterminada.

PSCustomObject

Si usa el parámetro AsCustomObject , genera un objeto PSCustomObject .

Object

Si usa el parámetro ReturnResult , este cmdlet devuelve el resultado de evaluar el bloque de script en el módulo dinámico.

Notas

Windows PowerShell incluye los siguientes alias para New-Module:

  • nmo

También puede hacer referencia a New-Module por su alias, nmo. Para más información, vea about_Aliases.