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-Module
que 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
Puede canalizar un nombre de módulo a este cmdlet.
Salidas
Este cmdlet genera un objeto PSModuleInfo de forma predeterminada.
Si usa el parámetro AsCustomObject , genera un objeto PSCustomObject .
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.