Compartilhar via


New-Module

Cria um novo módulo dinâmico que existe apenas na memória.

Sintaxe

ScriptBlock (Padrão)

New-Module
    [-ScriptBlock] <ScriptBlock>
    [-Function <String[]>]
    [-Cmdlet <String[]>]
    [-ReturnResult]
    [-AsCustomObject]
    [-ArgumentList <Object[]>]
    [<CommonParameters>]

Name

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, estão imediatamente disponíveis na sessão e permanecem disponíveis até que você feche a sessão.

Semelhante aos módulos estáticos, por padrão, os cmdlets e funções em um módulo dinâmico são exportadas e as variáveis e os aliases não sã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. Assim como todos os módulos, os membros de módulos dinâmicos são executados em um escopo de módulo privado que é um 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, redirecione um comando New-Module para Import-Module ou redirecione o objeto de módulo que New-Module retorna para Import-Module. Essa ação adiciona o módulo dinâmico à lista de Get-Module, mas não salva o módulo em disco ou 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: Trabalhando 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, somente 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 a variável e 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 parâmetro Nome 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 para o qual 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 tenha funções exportadas

Este exemplo mostra como usar o parâmetro AsCustomObject de New-Module para gerar um objeto personalizado que tem 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 AsCustomObject cria um objeto personalizado em vez do objeto PSModuleInfo que New-Module gera por padrão. Esse objeto personalizado é salvo na variável $m. A variável $m parece não ter nenhum 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

Redirecionar $m 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. Por fim, 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.

Propriedades do parâmetro

Tipo:

Object[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False
Aliases:Argumentos

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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 a 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 chamada A, somente um membro com cada nome poderá ser acessado do objeto personalizado.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Cmdlet

Especifica uma matriz de cmdlets que esse cmdlet exporta do módulo para a sessão atual. Digite uma lista separada por vírgulas dos cmdlets. Caracteres curinga são permitidos. Por padrão, todos os cmdlets no módulo são exportados.

Você não pode definir cmdlets em um bloco de script, mas um módulo dinâmico poderá incluir cmdlets se importar os cmdlets de um módulo binário.

Propriedades do parâmetro

Tipo:

String[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Function

Especifica uma matriz de funções que esse cmdlet exporta do módulo para a sessão atual. Insira uma lista separada por vírgulas de funções. Caracteres curinga são permitidos. Por padrão, todas as funções definidas em um módulo são exportadas.

Propriedades do parâmetro

Tipo:

String[]

Valor padrão:None
Dá suporte a curingas:True
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Name

Especifica um nome para o novo módulo. Você também pode encaminhar 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.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

Name
Cargo:0
Obrigatório:True
Valor do pipeline:True
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-ScriptBlock

Especifica o conteúdo do módulo dinâmico. Coloque o conteúdo entre chaves ({}) para criar um bloco de código. Este parâmetro é obrigatório.

Propriedades do parâmetro

Tipo:ScriptBlock
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:1
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

CommonParameters

Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.

Entradas

String

Você pode canalizar um nome de módulo para este cmdlet.

Saídas

PSModuleInfo

Por padrão, esse cmdlet gera um objeto PSModuleInfo.

PSCustomObject

Se você usar o parâmetro AsCustomObject, ele gerará um objeto PSCustomObject.

Object

Se você usar o parâmetro ReturnResult, esse cmdlet retornará o resultado da avaliação do bloco de script no módulo dinâmico.

Observações

O PowerShell inclui os seguintes aliases para New-Module:

  • Todas as plataformas:
    • nmo