Freigeben über


New-Module

Erstellt ein neues dynamisches Modul, das nur im Arbeitsspeicher vorhanden ist.

Syntax

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

Beschreibung

Das New-Module Cmdlet erstellt ein dynamisches Modul aus einem Skriptblock. Die Elemente des dynamischen Moduls, wie z. B. Funktionen und Variablen, sind in der Sitzung sofort verfügbar und bleiben verfügbar, bis Sie die Sitzung schließen.

Wie bei statischen Modulen werden in einem dynamischen Modul die Cmdlets und Funktionen standardmäßig exportiert, die Variablen und Aliase jedoch nicht. Sie können jedoch das Cmdlet Export-ModuleMember und die Parameter New-Module zum Überschreiben der Standardwerte verwenden.

Sie können auch den AsCustomObject-Parameter New-Module verwenden, um das dynamische Modul als benutzerdefiniertes Objekt zurückzugeben. Die Elemente der Module, wie z. B. Funktionen, werden als Skriptmethoden des benutzerdefinierten Objekts implementiert, statt in die Sitzung importiert zu werden.

Dynamische Module sind nur im Arbeitsspeicher vorhanden, nicht auf dem Datenträger. Wie bei allen Modulen werden die Elemente von dynamischen Modulen in einem privaten Modulbereich ausgeführt, der ein untergeordnetes Element des globalen Bereichs ist. Get-Module kann kein dynamisches Modul abrufen; Get-Command kann jedoch die exportierten Elemente abrufen.

Um ein dynamisches Modul verfügbar zu Get-Modulemachen, führen Sie einen New-Module Befehl an Import-Module aus, oder führen Sie das Modulobjekt weiter, das New-Module an Import-Module. Durch diese Aktion wird das dynamische Modul der Get-Module-Liste hinzugefügt, aber das Modul wird nicht auf dem Datenträger gespeichert oder persistent gemacht.

Beispiele

Beispiel 1: Erstellen eines dynamischen Moduls

In diesem Beispiel wird ein neues dynamisches Modul mit einer Funktion erstellt, die aufgerufen wird Hello. Der Befehl gibt ein Modulobjekt zurück, das das neue dynamische Modul darstellt.

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

Beispiel 2: Arbeiten mit dynamischen Modulen und Get-Module und Get-Command

In diesem Beispiel wird veranschaulicht, dass dynamische Module nicht vom Get-Module Cmdlet zurückgegeben werden. Die Elemente, die sie exportieren, werden vom Get-Command Cmdlet zurückgegeben.

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

Beispiel 3: Exportieren einer Variablen in die aktuelle Sitzung

In diesem Beispiel wird das Export-ModuleMember Cmdlet verwendet, um eine Variable in die aktuelle Sitzung zu exportieren. Ohne den Export-ModuleMember Befehl wird nur die Funktion exportiert.

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

Die Ausgabe zeigt, dass die Variable und die Funktion in die Sitzung exportiert wurden.

Beispiel 4: Bereitstellen eines dynamischen Moduls für Get-Module

In diesem Beispiel wird veranschaulicht, dass Sie ein dynamisches Modul zur Verfügung stellen Get-Module können, indem Sie das dynamische Modul an Import-Moduledas Modul anfügen.

New-Module erstellt ein Modulobjekt, das an das Import-Module Cmdlet weitergeleitet wird. Der Name-Parameter , der New-Module dem Modul einen Anzeigenamen zuweist. Da Import-Module standardmäßig keine Objekte zurückgegeben werden, gibt es keine Ausgabe dieses Befehls. Get-Module dass das GreetingModule-Element in die aktuelle Sitzung importiert wurde.

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

Das Get-Command Cmdlet zeigt die Hello Funktion an, die das dynamische Modul exportiert.

Beispiel 5: Generieren eines benutzerdefinierten Objekts mit exportierten Funktionen

In diesem Beispiel wird gezeigt, wie Sie den AsCustomObject-Parameter New-Module verwenden, um ein benutzerdefiniertes Objekt zu generieren, das Skriptmethoden enthält, die die exportierten Funktionen darstellen.

Das New-Module Cmdlet erstellt ein dynamisches Modul mit zwei Funktionen Hello und Goodbye. Der Parameter AsCustomObject erstellt ein benutzerdefiniertes Objekt anstelle des PSModuleInfo-Objekts , das New-Module standardmäßig generiert wird. Dieses benutzerdefinierte Objekt wird in der $m Variablen gespeichert. Die $m Variable scheint keinen zugewiesenen Wert zu haben.

$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

Durch das Weiterleiten $m an das Get-Member Cmdlet werden die Eigenschaften und Methoden des benutzerdefinierten Objekts angezeigt. Die Ausgabe zeigt, dass das Objekt Über Skriptmethoden verfügt, die die Hello Funktionen Goodbye darstellen. Schließlich rufen wir diese Skriptmethoden auf und zeigen die Ergebnisse an.

Beispiel 6: Abrufen der Ergebnisse des Skriptblocks

In diesem Beispiel wird der ReturnResult-Parameter verwendet, um die Ergebnisse des Ausführens des Skriptblocks anzufordern, anstatt ein Modulobjekt anzufordern. Der Skriptblock im neuen Modul definiert die SayHello Funktion und ruft dann die Funktion auf.

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

Hello, World!

Parameter

-ArgumentList

Gibt ein Array von Argumenten an, die Parameterwerte sind, die an den Skriptblock übergeben werden. Weitere Informationen zum Verhalten von ArgumentList finden Sie unter about_Splatting.

Typ:Object[]
Aliase:Args
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-AsCustomObject

Gibt an, dass dieses Cmdlet ein benutzerdefiniertes Objekt zurückgibt, das das dynamische Modul darstellt. Die Modulelemente werden als Skriptmethoden des benutzerdefinierten Objekts implementiert, aber sie werden nicht in die Sitzung importiert. Sie können das benutzerdefinierte Objekt in einer Variablen speichern und die punktierte Schreibweise verwenden, um die Elemente aufzurufen.

Wenn das Modul mehrere Elemente mit demselben Namen aufweist, z. B. eine Funktion und eine Variable mit dem Namen A, kann nur ein Element mit jedem Namen über das benutzerdefinierte Objekt zugegriffen werden.

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Cmdlet

Gibt ein Array von Cmdlets an, das dieses Cmdlet aus dem Modul in die aktuelle Sitzung exportiert. Geben Sie eine kommagetrennte Liste von Cmdlets ein. Platzhalterzeichen sind zulässig. Standardmäßig werden alle Cmdlets im Modul exportiert.

Sie können keine Cmdlets in einem Skriptblock definieren, aber ein dynamisches Modul kann Cmdlets enthalten, wenn es die Cmdlets aus einem binären Modul importiert.

Typ:String[]
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Function

Gibt ein Array von Funktionen an, das dieses Cmdlet aus dem Modul in die aktuelle Sitzung exportiert. Geben Sie eine kommagetrennte Liste von Funktionen ein. Platzhalterzeichen sind zulässig. Standardmäßig werden alle in einem Modul definierten Funktionen exportiert.

Typ:String[]
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:True

-Name

Gibt einen Namen für das neue Modul an. Sie können auch einen Modulnamen an New-Module übergeben.

Der Standardwert ist ein automatisch generierter Name, der beginnt mit __DynamicModule_ und folgt einer GUID, die den Pfad des dynamischen Moduls angibt.

Typ:String
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-ReturnResult

Gibt an, dass dieses Cmdlet den Skriptblock ausführt und die Skriptblockergebnisse zurückgibt, anstatt ein Modulobjekt zurückzugeben.

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ScriptBlock

Gibt den Inhalt des dynamischen Moduls an. Schließen Sie den Inhalt in geschweifte Klammern ({}) ein, um einen Skriptblock zu erstellen. Dieser Parameter ist erforderlich.

Typ:ScriptBlock
Position:1
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

Eingaben

String

Sie können einen Modulnamen an dieses Cmdlet weiterleiten.

Ausgaben

PSModuleInfo

Dieses Cmdlet generiert standardmäßig ein PSModuleInfo-Objekt .

PSCustomObject

Wenn Sie den Parameter AsCustomObject verwenden, wird ein PSCustomObject-Objekt generiert.

Object

Wenn Sie den ReturnResult-Parameter verwenden, gibt dieses Cmdlet das Ergebnis der Auswertung des Skriptblocks im dynamischen Modul zurück.

Hinweise

PowerShell enthält die folgenden Aliase für New-Module:

  • Alle Plattformen:
    • nmo