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-Module
che 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 Goodbye
Hello
. 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
È possibile inviare tramite pipe un nome di modulo a questo cmdlet.
Output
Questo cmdlet genera un oggetto PSModuleInfo per impostazione predefinita.
Se si utilizza il parametro AsCustomObject , viene generato un oggetto PSCustomObject .
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.