Condividi tramite


New-Module

Crea un nuovo modulo dinamico che esiste solo in memoria.

Sintassi

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>]

Descrizione

Il New-Module cmdlet crea un modulo dinamico da un blocco di script. I membri del modulo dinamico, ad esempio funzioni e variabili, sono immediatamente disponibili nella sessione e rimangono disponibili finché non si chiude la sessione.

Analogamente ai moduli statici, per impostazione predefinita vengono esportati i cmdlet e le funzioni di un modulo dinamico, ma non le variabili e gli alias. Tuttavia, è possibile usare il cmdlet Export-ModuleMember e i parametri di New-Module per eseguire l'override delle impostazioni predefinite.

È anche possibile usare il parametro AsCustomObject di New-Module per restituire il modulo dinamico come oggetto personalizzato. I membri dei moduli, ad esempio le funzioni, vengono implementati come metodi di script dell'oggetto personalizzato anziché essere importati nella sessione.

I moduli dinamici esistono solo in memoria, non su disco. Come tutti i moduli, i membri dei moduli dinamici vengono eseguiti in un ambito di modulo privato, ovvero un elemento figlio dell'ambito globale. Get-Module non può ottenere un modulo dinamico, ma Get-Command può ottenere i membri esportati.

Per rendere disponibile un modulo dinamico a Get-Module, inviare tramite pipe un New-Module comando a Import-Module o inviare tramite pipe l'oggetto modulo che New-Module restituisce a Import-Module. Questa azione aggiunge il modulo dinamico all'elenco Get-Module , ma non salva il modulo su disco o lo rende persistente.

Esempio

Esempio 1: Creare un modulo dinamico

In questo esempio viene creato un nuovo modulo dinamico con una funzione denominata Hello. Il comando restituisce un oggetto modulo che rappresenta il nuovo modulo dinamico.

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     : {}

Esempio 2: Uso di moduli dinamici e Get-Module e Get-Command

In questo esempio viene illustrato che i moduli dinamici non vengono restituiti dal Get-Module cmdlet . I membri che esportano vengono restituiti dal Get-Command cmdlet .

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!"

Esempio 3: Esportare una variabile nella sessione corrente

In questo esempio viene usato il Export-ModuleMember cmdlet per esportare una variabile nella sessione corrente. Senza il Export-ModuleMember comando, viene esportata solo la funzione .

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

L'output mostra che nella sessione sono state esportate sia la variabile che la funzione.

Esempio 4: Rendere disponibile un modulo dinamico per Get-Module

In questo esempio viene illustrato che è possibile rendere disponibile Get-Module un modulo dinamico tramite pipe del modulo dinamico a Import-Module.

New-Module crea un oggetto modulo inviato tramite pipe al Import-Module cmdlet . Il parametro Name di New-Module assegna un nome descrittivo al modulo. Poiché Import-Module non restituisce alcun oggetto per impostazione predefinita, non è disponibile alcun output da questo comando. Get-Moduleche GreetingModule è stato importato nella sessione corrente.

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!"

Il Get-Command cmdlet mostra la Hello funzione esportata dal modulo dinamico.

Esempio 5: Generare un oggetto personalizzato con funzioni esportate

In questo esempio viene illustrato come utilizzare il parametro AsCustomObject di New-Module per generare un oggetto personalizzato con metodi di script che rappresentano le funzioni esportate.

Il New-Module cmdlet crea un modulo dinamico con due funzioni e GoodbyeHello . Il parametro AsCustomObject crea un oggetto personalizzato anziché l'oggetto PSModuleInfo che New-Module genera per impostazione predefinita. Questo oggetto personalizzato viene salvato nella $m variabile . La $m variabile sembra non avere alcun valore assegnato.

$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

Tramite pipe $m al Get-Member cmdlet vengono visualizzate le proprietà e i metodi dell'oggetto personalizzato. L'output mostra che l'oggetto dispone di metodi script che rappresentano le Hello funzioni e Goodbye . Infine, questi metodi di script vengono chiamati e visualizzati i risultati.

Esempio 6: Ottenere i risultati del blocco di script

In questo esempio viene utilizzato il parametro ReturnResult per richiedere i risultati dell'esecuzione del blocco di script anziché richiedere un oggetto modulo. Il blocco di script nel nuovo modulo definisce la SayHello funzione e quindi chiama la funzione .

New-Module -ScriptBlock {function SayHello {"Hello, World!"}; SayHello} -ReturnResult

Hello, World!

Parametri

-ArgumentList

Specifica una matrice di argomenti che sono valori di parametro passati al blocco di script. Per altre informazioni sul comportamento di ArgumentList, vedere about_Splatting.

Tipo:Object[]
Alias:Args
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-AsCustomObject

Indica che questo cmdlet restituisce un oggetto personalizzato che rappresenta il modulo dinamico. I membri del modulo vengono implementati come metodi di script dell'oggetto personalizzato, ma non vengono importati nella sessione. È possibile salvare l'oggetto personalizzato in una variabile e usare la notazione del punto per richiamare i membri.

Se il modulo ha più membri con lo stesso nome, ad esempio una funzione e una variabile denominata A, è possibile accedere all'oggetto personalizzato un solo membro con ogni nome.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Cmdlet

Specifica una matrice di cmdlet che questo cmdlet esporta dal modulo nella sessione corrente. Immettere un elenco di cmdlet delimitato da virgole. I caratteri jolly sono consentiti. Per impostazione predefinita, vengono esportati tutti i cmdlet nel modulo.

Non è possibile definire i cmdlet in un blocco di script, ma un modulo dinamico può includere i cmdlet se li importa da un modulo binario.

Tipo:String[]
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Function

Specifica una matrice di funzioni esportate dal modulo nella sessione corrente. Immettere un elenco di funzioni delimitato da virgole. I caratteri jolly sono consentiti. Per impostazione predefinita, vengono esportate tutte le funzioni definite in un modulo.

Tipo:String[]
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:True

-Name

Specifica un nome per il nuovo modulo. È anche possibile inviare tramite pipe un nome del modulo a New-Module.

Il valore predefinito è un nome generato automaticamente che inizia con __DynamicModule_ e viene seguito da un GUID che specifica il percorso del modulo dinamico.

Tipo:String
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-ReturnResult

Indica che questo cmdlet esegue il blocco di script e restituisce i risultati del blocco di script anziché restituire un oggetto modulo.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ScriptBlock

Specifica il contenuto del modulo dinamico. Racchiudere il contenuto tra parentesi graffe ({}) per creare un blocco di script. Questo parametro è obbligatorio.

Tipo:ScriptBlock
Posizione:1
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

Input

String

È possibile inviare tramite pipe un nome di modulo a questo cmdlet.

Output

PSModuleInfo

Questo cmdlet genera un oggetto PSModuleInfo per impostazione predefinita.

PSCustomObject

Se si utilizza il parametro AsCustomObject , viene generato un oggetto PSCustomObject .

Object

Se si usa il parametro ReturnResult , questo cmdlet restituisce il risultato della valutazione del blocco di script nel modulo dinamico.

Note

Windows PowerShell include gli alias seguenti per New-Module:

  • nmo

È anche possibile fare riferimento al New-Module relativo alias, nmo. Per altre informazioni, vedere about_Aliases.