New-Module
Crea un nuovo modulo dinamico esistente 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 cmdlet New-Module
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 fino a quando non si chiude la sessione.
Come i moduli statici, per impostazione predefinita, i cmdlet e le funzioni in un modulo dinamico vengono esportati e le variabili e gli alias non sono. 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. Analogamente a tutti i moduli, i membri dei moduli dinamici vengono eseguiti in un ambito di modulo privato figlio dell'ambito globale. Get-Module non è possibile ottenere un modulo dinamico, ma Get-Command può ottenere i membri esportati.
Per rendere disponibile un modulo dinamico per Get-Module
, inviare tramite pipe un comando New-Module
a Import-Module o inviare tramite pipe l'oggetto modulo che New-Module
torna a Import-Module
. Questa azione aggiunge il modulo dinamico all'elenco di 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: Utilizzo di moduli dinamici e Get-Module e Get-Command
In questo esempio viene illustrato che i moduli dinamici non vengono restituiti dal cmdlet Get-Module
. I membri che esportano vengono restituiti dal 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!"
Esempio 3: Esportare una variabile nella sessione corrente
In questo esempio viene usato il cmdlet Export-ModuleMember
per esportare una variabile nella sessione corrente.
Senza il comando Export-ModuleMember
, 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 sia la variabile che la funzione sono state esportate nella sessione.
Esempio 4: Rendere disponibile un modulo dinamico per Get-Module
In questo esempio viene illustrato che è possibile rendere disponibile un modulo dinamico per Get-Module
inviando il piping del modulo dinamico a Import-Module
.
New-Module
crea un oggetto modulo inviato tramite pipe al cmdlet Import-Module
. 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 il GreetingModule sia 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 cmdlet Get-Command
mostra la funzione Hello
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 cmdlet New-Module
crea un modulo dinamico con due funzioni, Hello
e Goodbye
. Il parametro AsCustomObject crea un oggetto personalizzato anziché l'oggetto PSModuleInfoNew-Module
generato per impostazione predefinita. Questo oggetto personalizzato viene salvato nella variabile $m
.
La variabile $m
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
Il piping $m
al cmdlet Get-Member
visualizza le proprietà e i metodi dell'oggetto personalizzato. L'output mostra che l'oggetto dispone di metodi di script che rappresentano le funzioni di Hello
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 usato 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 funzione SayHello
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 script dell'oggetto personalizzato, ma non vengono importati nella sessione. È possibile salvare l'oggetto personalizzato in una variabile e usare la notazione 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 delimitato da virgole di cmdlet. Sono consentiti caratteri jolly. Per impostazione predefinita, tutti i cmdlet nel modulo vengono esportati.
Non è possibile definire i cmdlet in un blocco di script, ma un modulo dinamico può includere cmdlet se importa i cmdlet 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 delimitato da virgole di funzioni. Sono consentiti caratteri jolly. 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 di modulo a New-Module.
Il valore predefinito è un nome generato automaticamente che inizia con __DynamicModule_
ed è 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
PowerShell include gli alias seguenti per New-Module
:
- Tutte le piattaforme:
nmo