New-Module

Skapar en ny dynamisk modul som bara finns i minnet.

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

Cmdleten New-Module skapar en dynamisk modul från ett skriptblock. Medlemmarna i den dynamiska modulen, till exempel funktioner och variabler, är omedelbart tillgängliga i sessionen och förblir tillgängliga tills du stänger sessionen.

Precis som statiska moduler exporteras som standard cmdletar och funktioner i en dynamisk modul och variablerna och aliasen är inte det. Du kan dock använda cmdleten Export-ModuleMember och parametrarna New-Module för för att åsidosätta standardvärdena.

Du kan också använda parametern New-Module AsCustomObject för för att returnera den dynamiska modulen som ett anpassat objekt. Medlemmarna i modulerna, till exempel funktioner, implementeras som skriptmetoder för det anpassade objektet i stället för att importeras till sessionen.

Dynamiska moduler finns bara i minnet, inte på disken. Liksom alla moduler körs medlemmarna i dynamiska moduler i ett privat modulomfång som är underordnat det globala omfånget. Get-Module kan inte hämta en dynamisk modul, men Get-Command kan hämta de exporterade medlemmarna.

Om du vill göra en dynamisk modul tillgänglig för Get-Moduleskickar du ett New-Module kommando till Import-Module eller dirigerar modulobjektet som New-Module återgår till Import-Module. Den här åtgärden lägger till den dynamiska modulen i Get-Module listan, men den sparar inte modulen på disken eller gör den beständig.

Exempel

Exempel 1: Skapa en dynamisk modul

Det här exemplet skapar en ny dynamisk modul med en funktion som heter Hello. Kommandot returnerar ett modulobjekt som representerar den nya dynamiska modulen.

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

Exempel 2: Arbeta med dynamiska moduler och Get-Module och Get-Command

Det här exemplet visar att dynamiska moduler inte returneras av cmdleten Get-Module . De medlemmar som de exporterar returneras av cmdleten 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!"

Exempel 3: Exportera en variabel till den aktuella sessionen

I det här exemplet används cmdleten Export-ModuleMember för att exportera en variabel till den aktuella sessionen. Export-ModuleMember Utan kommandot exporteras endast funktionen.

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

Utdata visar att både variabeln och funktionen exporterades till sessionen.

Exempel 4: Gör en dynamisk modul tillgänglig för Get-Module

Det här exemplet visar att du kan göra en dynamisk modul tillgänglig genom att Get-Module skicka den dynamiska modulen till Import-Module.

New-Module skapar ett modulobjekt som skickas till cmdleten Import-Module . Parametern New-Module Namn för tilldelar modulen ett eget namn. Eftersom Import-Module inga objekt returneras som standard finns det inga utdata från det här kommandot. Get-Moduleatt GreetingModule har importerats till den aktuella sessionen.

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

Cmdleten Get-Command visar den Hello funktion som den dynamiska modulen exporterar.

Exempel 5: Generera ett anpassat objekt som har exporterade funktioner

Det här exemplet visar hur du använder parametern New-Module AsCustomObject för för att generera ett anpassat objekt som har skriptmetoder som representerar de exporterade funktionerna.

Cmdleten New-Module skapar en dynamisk modul med två funktioner och HelloGoodbye. Parametern AsCustomObject skapar ett anpassat objekt i stället för PSModuleInfo-objektet som New-Module genereras som standard. Det här anpassade objektet sparas i variabeln $m . Variabeln $m verkar inte ha något tilldelat värde.

$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

Rördragning $m till cmdleten Get-Member visar egenskaperna och metoderna för det anpassade objektet. Utdata visar att objektet har skriptmetoder som representerar Hello funktionerna och Goodbye . Slutligen anropar vi dessa skriptmetoder och visar resultatet.

Exempel 6: Hämta resultatet av skriptblocket

I det här exemplet används parametern ReturnResult för att begära resultatet av att köra skriptblocket i stället för att begära ett modulobjekt. Skriptblocket i den nya modulen definierar SayHello funktionen och anropar sedan funktionen.

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

Hello, World!

Parametrar

-ArgumentList

Anger en matris med argument som är parametervärden som skickas till skriptblocket. Mer information om beteendet för ArgumentList finns i about_Splatting.

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

-AsCustomObject

Anger att den här cmdleten returnerar ett anpassat objekt som representerar den dynamiska modulen. Modulmedlemmarna implementeras som skriptmetoder för det anpassade objektet, men de importeras inte till sessionen. Du kan spara det anpassade objektet i en variabel och använda punkt notation för att anropa medlemmarna.

Om modulen har flera medlemmar med samma namn, till exempel en funktion och en variabel som båda heter A, kan endast en medlem med varje namn nås från det anpassade objektet.

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

-Cmdlet

Anger en matris med cmdletar som denna cmdlet exporterar från modulen till den aktuella sessionen. Ange en kommaavgränsad lista över cmdletar. Jokertecken tillåts. Som standard exporteras alla cmdletar i modulen.

Du kan inte definiera cmdletar i ett skriptblock, men en dynamisk modul kan innehålla cmdletar om den importerar cmdletarna från en binär modul.

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

-Function

Anger en matris med funktioner som den här cmdleten exporterar från modulen till den aktuella sessionen. Ange en kommaavgränsad lista över funktioner. Jokertecken tillåts. Som standard exporteras alla funktioner som definierats i en modul.

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

-Name

Anger ett namn för den nya modulen. Du kan också skicka ett modulnamn till New-Module.

Standardvärdet är ett automatiskt genererat namn som börjar med __DynamicModule_ och följs av ett GUID som anger sökvägen till den dynamiska modulen.

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

-ReturnResult

Anger att den här cmdleten kör skriptblocket och returnerar skriptblockresultatet i stället för att returnera ett modulobjekt.

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

-ScriptBlock

Anger innehållet i den dynamiska modulen. Omslut innehållet i klammerparenteser ({}) för att skapa ett skriptblock. Den här parametern krävs.

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

Indata

String

Du kan skicka ett modulnamn till den här cmdleten.

Utdata

PSModuleInfo

Den här cmdleten genererar ett PSModuleInfo-objekt som standard.

PSCustomObject

Om du använder parametern AsCustomObject genereras ett PSCustomObject-objekt .

Object

Om du använder parametern ReturnResult returnerar den här cmdleten resultatet av utvärderingen av skriptblocket i den dynamiska modulen.

Kommentarer

PowerShell innehåller följande alias för New-Module:

  • Alla plattformar:
    • nmo