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
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
PowerShell incluye los siguientes alias para New-Module
:
- Todas las plataformas:
nmo