New-Module
Cria um novo módulo dinâmico que existe apenas na memória.
Sintaxe
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
O cmdlet New-Module
cria um módulo dinâmico a partir de um bloco de script. Os membros do módulo dinâmico, como funções e variáveis, ficam imediatamente disponíveis na sessão e permanecem disponíveis até que você feche a sessão.
Como os módulos estáticos, por padrão, os cmdlets e funções em um módulo dinâmico são exportados e as variáveis e aliases não. No entanto, você pode usar o cmdlet Export-ModuleMember e os parâmetros de New-Module
para substituir os padrões.
Você também pode usar o parâmetro AsCustomObject de New-Module
para retornar o módulo dinâmico como um objeto personalizado. Os membros dos módulos, como funções, são implementados como métodos de script do objeto personalizado em vez de serem importados para a sessão.
Os módulos dinâmicos existem apenas na memória, não no disco. Como todos os módulos, os membros dos módulos dinâmicos são executados em um escopo de módulo privado que é filho do escopo global. Get-Module não pode obter um módulo dinâmico, mas Get-Command pode obter os membros exportados.
Para disponibilizar um módulo dinâmico para Get-Module
, canalize um comando New-Module
para Import-Module ou canalize o objeto de módulo que New-Module
retorna para Import-Module
. Esta ação adiciona o módulo dinâmico à lista de Get-Module
, mas não salva o módulo no disco nem o torna persistente.
Exemplos
Exemplo 1: Criar um módulo dinâmico
Este exemplo cria um novo módulo dinâmico com uma função chamada Hello
. O comando retorna um objeto de módulo que representa o novo 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 : {}
Exemplo 2: Trabalhar com módulos dinâmicos e Get-Module e Get-Command
Este exemplo demonstra que os módulos dinâmicos não são retornados pelo cmdlet Get-Module
. Os membros que eles exportam são retornados pelo cmdlet 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!"
Exemplo 3: Exportar uma variável para a sessão atual
Este exemplo usa o cmdlet Export-ModuleMember
para exportar uma variável para a sessão atual.
Sem o comando Export-ModuleMember
, apenas a função é exportada.
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
A saída mostra que tanto a variável quanto a função foram exportadas para a sessão.
Exemplo 4: Disponibilizar um módulo dinâmico para Get-Module
Este exemplo demonstra que você pode disponibilizar um módulo dinâmico para Get-Module
canalizando o módulo dinâmico para Import-Module
.
New-Module
cria um objeto de módulo que é canalizado para o cmdlet Import-Module
. O Name parâmetro de New-Module
atribui um nome amigável ao módulo. Como Import-Module
não retorna nenhum objeto por padrão, não há saída desse comando.
Get-Module
que o GreetingModule foi importado para a sessão atual.
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!"
O cmdlet Get-Command
mostra a função Hello
que o módulo dinâmico exporta.
Exemplo 5: Gerar um objeto personalizado que exportou funções
Este exemplo mostra como usar o parâmetro AsCustomObject de New-Module
para gerar um objeto personalizado que tenha métodos de script que representam as funções exportadas.
O cmdlet New-Module
cria um módulo dinâmico com duas funções, Hello
e Goodbye
. O parâmetro $m
.
A variável $m
parece não ter valor atribuído.
$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
O $m
de canalização para o cmdlet Get-Member
exibe as propriedades e os métodos do objeto personalizado. A saída mostra que o objeto tem métodos de script que representam as funções Hello
e Goodbye
.
Finalmente, chamamos esses métodos de script e exibimos os resultados.
Exemplo 6: Obter os resultados do bloco de script
Este exemplo usa o parâmetro ReturnResult para solicitar os resultados da execução do bloco de script em vez de solicitar um objeto de módulo. O bloco de script no novo módulo define a função SayHello
e, em seguida, chama a função.
New-Module -ScriptBlock {function SayHello {"Hello, World!"}; SayHello} -ReturnResult
Hello, World!
Parâmetros
-ArgumentList
Especifica uma matriz de argumentos que são valores de parâmetro que são passados para o bloco de script. Para obter mais informações sobre o comportamento de ArgumentList, consulte about_Splatting.
Tipo: | Object[] |
Aliases: | Args |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-AsCustomObject
Indica que esse cmdlet retorna um objeto personalizado que representa o módulo dinâmico. Os membros do módulo são implementados como métodos de script do objeto personalizado, mas não são importados para a sessão. Você pode salvar o objeto personalizado em uma variável e usar notação de ponto para invocar os membros.
Se o módulo tiver vários membros com o mesmo nome, como uma função e uma variável ambas denominadas A, apenas um membro com cada nome poderá ser acessado a partir do objeto personalizado.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Cmdlet
Especifica uma matriz de cmdlets que esse cmdlet exporta do módulo para a sessão atual. Insira uma lista de cmdlets separados por vírgula. Caracteres curinga são permitidos. Por padrão, todos os cmdlets no módulo são exportados.
Não é possível definir cmdlets em um bloco de script, mas um módulo dinâmico pode incluir cmdlets se importar os cmdlets de um módulo binário.
Tipo: | String[] |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Function
Especifica uma matriz de funções que esse cmdlet exporta do módulo para a sessão atual. Insira uma lista de funções separadas por vírgula. Caracteres curinga são permitidos. Por padrão, todas as funções definidas em um módulo são exportadas.
Tipo: | String[] |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | True |
-Name
Especifica um nome para o novo módulo. Você também pode canalizar um nome de módulo para New-Module.
O valor padrão é um nome gerado automaticamente que começa com __DynamicModule_
e é seguido por um GUID que especifica o caminho do módulo dinâmico.
Tipo: | String |
Position: | 0 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-ReturnResult
Indica que esse cmdlet executa o bloco de script e retorna os resultados do bloco de script em vez de retornar um objeto de módulo.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-ScriptBlock
Especifica o conteúdo do módulo dinâmico. Coloque o conteúdo entre chaves ({}
) para criar um bloco de script. Este parâmetro é obrigatório.
Tipo: | ScriptBlock |
Position: | 1 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
Entradas
Você pode canalizar um nome de módulo para esse cmdlet.
Saídas
Este cmdlet gera um objeto PSModuleInfo
Se você usar o parâmetro AsCustomObject, ele gerará um objeto PSCustomObject.
Se você usar o parâmetro ReturnResult, esse cmdlet retornará o resultado da avaliação do bloco de script no módulo dinâmico.
Notas
O PowerShell inclui os seguintes aliases para New-Module
:
- Todas as plataformas:
nmo