Dela via


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 för New-Module för att åsidosätta standardvärdena.

Du kan också använda parametern AsCustomObject för New-Module 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 skickar modulobjektet som New-Module återgår till Import-Module. Den här åtgärden lägger till den dynamiska modulen i listan Get-Module, men den sparar inte modulen på disken eller gör den beständig.

Exempel

Exempel 1: Skapa en dynamisk modul

I det här exemplet skapas 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. Utan kommandot Export-ModuleMember 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 för Get-Module genom att skicka den dynamiska modulen till Import-Module.

New-Module skapar ett modulobjekt som skickas till cmdleten Import-Module. Parametern Name i New-Module tilldelar modulen ett eget namn. Eftersom Import-Module inte returnerar några objekt som standard finns det inga utdata från det här kommandot. Get-Module att 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 AsCustomObject för New-Module 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, Hello och Goodbye. Parametern AsCustomObject skapar ett anpassat objekt i stället för det PSModuleInfo- objekt som New-Module genererar 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

Om du $m till cmdleten Get-Member visas egenskaperna och metoderna för det anpassade objektet. Utdata visar att objektet har skriptmetoder som representerar funktionerna Hello 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 funktionen SayHello 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 ArgumentListfinns i about_Splatting.

Typ:Object[]
Alias:Args
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken: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.

Typ:SwitchParameter
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken: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.

Typ:String[]
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken: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.

Typ:String[]
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken: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.

Typ:String
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-ReturnResult

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

Typ:SwitchParameter
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken: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.

Typ:ScriptBlock
Position:1
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

Indata

String

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

Utdata

PSModuleInfo

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

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