Partilhar via


New-Module

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

Sintaxe

ScriptBlock (Predefiniçã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, 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, pode usar o cmdlet Export-ModuleMember e os parâmetros de New-Module para alterar as predefiniçõ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 operam 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 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 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

Canalizar o $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. 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 mais informações sobre o comportamento de ArgumentList, consulte about_Splatting.

Propriedades dos parâmetros

Tipo:

Object[]

Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:Argumentos

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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.

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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 coringa 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.

Propriedades dos parâmetros

Tipo:

String[]

Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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 coringa são permitidos. Por padrão, todas as funções definidas em um módulo são exportadas.

Propriedades dos parâmetros

Tipo:

String[]

Default value:None
Suporta carateres universais:True
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-Name

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

Tipo:String
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

Name
Position:0
Obrigatório:True
Valor do pipeline:True
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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 dos parâmetros

Tipo:SwitchParameter
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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.

Propriedades dos parâmetros

Tipo:ScriptBlock
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:1
Obrigatório:True
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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 esse cmdlet.

Saídas

PSModuleInfo

Este cmdlet gera por padrão 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.

Notas

O PowerShell inclui os seguintes aliases para New-Module:

  • Todas as plataformas:
    • nmo