Delen via


New-Module

Hiermee maakt u een nieuwe dynamische module die alleen in het geheugen bestaat.

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

Description

De New-Module cmdlet maakt een dynamische module op basis van een scriptblok. De leden van de dynamische module, zoals functies en variabelen, zijn onmiddellijk beschikbaar in de sessie en blijven beschikbaar totdat u de sessie sluit.

Net als statische modules worden de cmdlets en functies in een dynamische module standaard geëxporteerd en de variabelen en aliassen niet. U kunt echter de cmdlet Export-ModuleMember en de parameters van New-Module gebruiken om de standaardinstellingen te overschrijven.

U kunt ook de parameter AsCustomObject van New-Module gebruiken om de dynamische module als een aangepast object te retourneren. De leden van de modules, zoals functies, worden geïmplementeerd als scriptmethoden van het aangepaste object in plaats van in de sessie te worden geïmporteerd.

Dynamische modules bestaan alleen in het geheugen, niet op schijf. Net als alle modules worden de leden van dynamische modules uitgevoerd in een privémodulebereik dat een onderliggend element is van het globale bereik. Get-Module kan geen dynamische module ophalen, maar Get-Command kunnen wel de geëxporteerde leden ophalen.

Als u een dynamische module beschikbaar wilt maken voor Get-Module, sluist u een New-Module opdracht door naar Import-Module of sluist u het moduleobject door dat New-Module terugkeert naar Import-Module. Met deze actie wordt de dynamische module aan de Get-Module lijst toegevoegd, maar wordt de module niet op schijf opgeslagen of permanent gemaakt.

Voorbeelden

Voorbeeld 1: een dynamische module Creatie

In dit voorbeeld wordt een nieuwe dynamische module gemaakt met een functie met de naam Hello. De opdracht retourneert een moduleobject dat de nieuwe dynamische module vertegenwoordigt.

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

Voorbeeld 2: Werken met dynamische modules en Get-Module en Get-Command

Dit voorbeeld laat zien dat dynamische modules niet worden geretourneerd door de Get-Module cmdlet. De leden die ze exporteren, worden geretourneerd door de 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!"

Voorbeeld 3: Een variabele exporteren naar de huidige sessie

In dit voorbeeld wordt de Export-ModuleMember cmdlet gebruikt om een variabele te exporteren naar de huidige sessie. Zonder de Export-ModuleMember opdracht wordt alleen de functie geëxporteerd.

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

De uitvoer laat zien dat zowel de variabele als de functie zijn geëxporteerd naar de sessie.

Voorbeeld 4: Een dynamische module beschikbaar maken voor Get-Module

In dit voorbeeld ziet u dat u een dynamische module beschikbaar kunt maken voor Get-Module door de dynamische module door te slikken naar Import-Module.

New-Module maakt een moduleobject dat wordt doorgesluisd naar de Import-Module cmdlet. De parameter Name van New-Module wijst een beschrijvende naam toe aan de module. Omdat Import-Module standaard geen objecten worden geretourneerd, is er geen uitvoer van deze opdracht. Get-Module of de GreetingModule is geïmporteerd in de huidige sessie.

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

De Get-Command cmdlet toont de Hello functie die de dynamische module exporteert.

Voorbeeld 5: Een aangepast object genereren met geëxporteerde functies

In dit voorbeeld ziet u hoe u de parameter AsCustomObject van New-Module gebruikt om een aangepast object te genereren met scriptmethoden die de geëxporteerde functies vertegenwoordigen.

De New-Module cmdlet maakt een dynamische module met twee functies, Hello en Goodbye. De parameter AsCustomObject maakt een aangepast object in plaats van het psModuleInfo-object dat New-Module standaard wordt gegenereerd. Dit aangepaste object wordt opgeslagen in de $m variabele. De $m variabele lijkt geen toegewezen waarde te hebben.

$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

Als u doorsluist $m naar de Get-Member cmdlet, worden de eigenschappen en methoden van het aangepaste object weergegeven. De uitvoer laat zien dat het object scriptmethoden heeft die de Hello functies en Goodbye vertegenwoordigen. Ten slotte roepen we deze scriptmethoden aan en geven we de resultaten weer.

Voorbeeld 6: De resultaten van het scriptblok ophalen

In dit voorbeeld wordt de parameter ReturnResult gebruikt om de resultaten van het uitvoeren van het scriptblok op te vragen in plaats van een moduleobject aan te vragen. Het scriptblok in de nieuwe module definieert de SayHello functie en roept vervolgens de functie aan.

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

Hello, World!

Parameters

-ArgumentList

Hiermee geeft u een matrix met argumenten op die parameterwaarden zijn die worden doorgegeven aan het scriptblok. Zie about_Splatting voor meer informatie over het gedrag van ArgumentList.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsCustomObject

Geeft aan dat deze cmdlet een aangepast object retourneert dat de dynamische module vertegenwoordigt. De moduleleden worden geïmplementeerd als scriptmethoden van het aangepaste object, maar ze worden niet geïmporteerd in de sessie. U kunt het aangepaste object opslaan in een variabele en de puntnotatie gebruiken om de leden aan te roepen.

Als de module meerdere leden met dezelfde naam heeft, zoals een functie en een variabele die beide de naam A hebben, kan slechts één lid met elke naam worden geopend vanuit het aangepaste object.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Cmdlet

Hiermee geeft u een matrix van cmdlets die deze cmdlet exporteert van de module naar de huidige sessie. Voer een door komma's gescheiden lijst met cmdlets in. Jokertekens zijn toegestaan. Standaard worden alle cmdlets in de module geëxporteerd.

U kunt geen cmdlets definiëren in een scriptblok, maar een dynamische module kan cmdlets bevatten als deze de cmdlets uit een binaire module importeert.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Function

Hiermee geeft u een matrix van functies die deze cmdlet exporteert van de module naar de huidige sessie. Voer een door komma's gescheiden lijst met functies in. Jokertekens zijn toegestaan. Standaard worden alle functies die in een module zijn gedefinieerd, geëxporteerd.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Name

Hiermee geeft u een naam voor de nieuwe module. U kunt ook de naam van een module doorsnijden naar New-Module.

De standaardwaarde is een automatisch gegenereerde naam die begint met __DynamicModule_ en wordt gevolgd door een GUID die het pad van de dynamische module aangeeft.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ReturnResult

Geeft aan dat met deze cmdlet het scriptblok wordt uitgevoerd en de resultaten van het scriptblok worden geretourneerd in plaats van een moduleobject.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

Hiermee geeft u de inhoud van de dynamische module. Plaats de inhoud tussen accolades ({}) om een scriptblok te maken. Deze parameter is vereist.

Type:ScriptBlock
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

String

U kunt een modulenaam doorsnijden naar deze cmdlet.

Uitvoerwaarden

PSModuleInfo

Met deze cmdlet wordt standaard een PSModuleInfo-object gegenereerd.

PSCustomObject

Als u de parameter AsCustomObject gebruikt, wordt er een PSCustomObject-object gegenereerd.

Object

Als u de parameter ReturnResult gebruikt, retourneert deze cmdlet het resultaat van het evalueren van het scriptblok in de dynamische module.

Notities

PowerShell bevat de volgende aliassen voor New-Module:

  • Alle platformen:
    • nmo