Compartir a través de


New-Module

Crea un nuevo módulo dinámico que solo existe en la 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 cmdlet New-Module crea un módulo dinámico a partir de un bloque de scripts. Los miembros del módulo dinámico, como funciones y variables, están disponibles inmediatamente en la sesión y permanecen disponibles hasta que cierre la sesión.

Al igual que los módulos estáticos, de forma predeterminada, los cmdlets y las funciones de un módulo dinámico se exportan y no se exportan las variables y 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 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 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 comando New-Module 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 de 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 cmdlet Get-Module no devuelve los módulos dinámicos. El cmdlet Get-Command devuelve los miembros que exportan.

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 cmdlet Export-ModuleMember para exportar una variable a la sesión actual. Sin el comando Export-ModuleMember, 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

La salida muestra que tanto la variable como la función se exportaron a 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 para Get-Module canalizando el módulo dinámico para Import-Module.

New-Module crea un objeto de módulo que se canaliza al cmdlet Import-Module. El parámetro Name de New-Module asigna un nombre amigable al módulo. Dado que Import-Module no devuelve ningún objeto de forma predeterminada, no hay ninguna salida de este comando. Get-Module que el GreetingModule ha sido importado en 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 cmdlet Get-Command muestra la función Hello 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 cmdlet New-Module crea un módulo dinámico con dos funciones, Hello y Goodbye. El parámetro AsCustomObject crea un objeto personalizado en lugar del objeto PSModuleInfo de que New-Module genera de forma predeterminada. Este objeto personalizado se guarda en la variable $m. La variable $m 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 cmdlet Get-Member muestra las propiedades y los métodos del objeto personalizado. La salida muestra que el objeto tiene métodos de script que representan las funciones Hello y Goodbye. Por último, llamamos a estos métodos de script y mostramos 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 función SayHello 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 del 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 puntos 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 importa los cmdlets de 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

Especifica un nombre para el nuevo módulo. También puede canalizar un nombre de 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

PowerShell incluye los siguientes alias para New-Module:

  • Todas las plataformas:
    • nmo