Udostępnij za pośrednictwem


New-Module

Tworzy nowy moduł dynamiczny, który istnieje tylko w pamięci.

Składnia

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

Opis

Polecenie cmdlet New-Module tworzy moduł dynamiczny z bloku skryptu. Elementy członkowskie modułu dynamicznego, takie jak funkcje i zmienne, są natychmiast dostępne w sesji i pozostają dostępne do momentu zamknięcia sesji.

Podobnie jak moduły statyczne, domyślnie polecenia cmdlet i funkcje w module dynamicznym są eksportowane, a zmienne i aliasy nie. Można jednak użyć polecenia cmdlet Export-ModuleMember i parametrów New-Module, aby zastąpić wartości domyślne.

Możesz również użyć parametru AsCustomObjectNew-Module, aby zwrócić moduł dynamiczny jako obiekt niestandardowy. Elementy członkowskie modułów, takie jak funkcje, są implementowane jako metody skryptu obiektu niestandardowego, a nie importowane do sesji.

Moduły dynamiczne istnieją tylko w pamięci, a nie na dysku. Podobnie jak wszystkie moduły, elementy członkowskie modułów dynamicznych są uruchamiane w zakresie modułu prywatnego będącego elementem podrzędnym zakresu globalnego. Get-Module nie można pobrać modułu dynamicznego, ale Get-Command może pobrać wyeksportowane elementy członkowskie.

Aby udostępnić moduł dynamiczny Get-Module, należy przekazać polecenie New-Module do modułu Import-Module lub potokować obiekt modułu, który New-Module powrócić do Import-Module. Ta akcja dodaje moduł dynamiczny do listy Get-Module, ale nie zapisuje modułu na dysku ani nie powoduje jego trwałego.

Przykłady

Przykład 1. Tworzenie modułu dynamicznego

W tym przykładzie zostanie utworzony nowy moduł dynamiczny z funkcją o nazwie Hello. Polecenie zwraca obiekt modułu reprezentujący nowy moduł dynamiczny.

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

Przykład 2. Praca z modułami dynamicznymi i Get-Module i Get-Command

W tym przykładzie pokazano, że moduły dynamiczne nie są zwracane przez polecenie cmdlet Get-Module. Członkowie, których eksportują, są zwracane przez polecenie 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!"

Przykład 3. Eksportowanie zmiennej do bieżącej sesji

W tym przykładzie użyto polecenia cmdlet Export-ModuleMember do wyeksportowania zmiennej do bieżącej sesji. Bez polecenia Export-ModuleMember eksportowana jest tylko funkcja.

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

Dane wyjściowe pokazują, że zarówno zmienna, jak i funkcja zostały wyeksportowane do sesji.

Przykład 4. Udostępnianie modułu dynamicznego Get-Module

W tym przykładzie pokazano, że można udostępnić moduł dynamiczny Get-Module przez potokowanie modułu dynamicznego w celu Import-Module.

New-Module tworzy obiekt modułu, który jest potokiem do polecenia cmdlet Import-Module. Parametr NameNew-Module przypisuje przyjazną nazwę do modułu. Ponieważ Import-Module domyślnie nie zwraca żadnych obiektów, nie ma danych wyjściowych tego polecenia. Get-Module, że GreetingModule został zaimportowany do bieżącej sesji.

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

Polecenie cmdlet Get-Command pokazuje funkcję Hello eksportowaną przez moduł dynamiczny.

Przykład 5. Generowanie obiektu niestandardowego z wyeksportowanymi funkcjami

W tym przykładzie pokazano, jak użyć parametru AsCustomObjectNew-Module w celu wygenerowania obiektu niestandardowego, który zawiera metody skryptu reprezentujące wyeksportowane funkcje.

Polecenie cmdlet New-Module tworzy moduł dynamiczny z dwoma funkcjami, Hello i Goodbye. Parametr AsCustomObject tworzy obiekt niestandardowy zamiast obiektu PSModuleInfo, który New-Module generuje domyślnie. Ten obiekt niestandardowy jest zapisywany w zmiennej $m. Zmienna $m wydaje się nie mieć przypisanej wartości.

$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

Potokowanie $m do polecenia cmdlet Get-Member wyświetla właściwości i metody obiektu niestandardowego. Dane wyjściowe pokazują, że obiekt ma metody skryptu reprezentujące funkcje Hello i Goodbye. Na koniec wywołujemy te metody skryptu i wyświetlamy wyniki.

Przykład 6. Pobieranie wyników bloku skryptu

W tym przykładzie użyto parametru ReturnResult, aby zażądać wyników uruchomienia bloku skryptu zamiast żądania obiektu modułu. Blok skryptu w nowym module definiuje funkcję SayHello, a następnie wywołuje funkcję.

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

Hello, World!

Parametry

-ArgumentList

Określa tablicę argumentów, które są wartościami parametrów przekazywanymi do bloku skryptu. Aby uzyskać więcej informacji na temat zachowania ArgumentList, zobacz about_Splatting.

Typ:Object[]
Aliasy:Args
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-AsCustomObject

Wskazuje, że to polecenie cmdlet zwraca obiekt niestandardowy reprezentujący moduł dynamiczny. Elementy członkowskie modułu są implementowane jako metody skryptu obiektu niestandardowego, ale nie są importowane do sesji. Obiekt niestandardowy można zapisać w zmiennej i użyć notacji kropkowej, aby wywołać elementy członkowskie.

Jeśli moduł ma wiele elementów członkowskich o tej samej nazwie, takich jak funkcja i zmienna o nazwie A, dostęp do każdego elementu członkowskiego o każdej nazwie można uzyskać dostęp z obiektu niestandardowego.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Cmdlet

Określa tablicę poleceń cmdlet, które to polecenie cmdlet eksportuje z modułu do bieżącej sesji. Wprowadź rozdzielaną przecinkami listę poleceń cmdlet. Dozwolone są symbole wieloznaczne. Domyślnie wszystkie polecenia cmdlet w module są eksportowane.

Nie można zdefiniować poleceń cmdlet w bloku skryptu, ale moduł dynamiczny może zawierać polecenia cmdlet, jeśli importuje polecenia cmdlet z modułu binarnego.

Typ:String[]
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Function

Określa tablicę funkcji, które to polecenie cmdlet eksportuje z modułu do bieżącej sesji. Wprowadź rozdzielaną przecinkami listę funkcji. Dozwolone są symbole wieloznaczne. Domyślnie wszystkie funkcje zdefiniowane w module są eksportowane.

Typ:String[]
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:True

-Name

Określa nazwę nowego modułu. Możesz również przekazać nazwę modułu do polecenia New-Module.

Wartość domyślna to automatycznie wygenerowana nazwa rozpoczynająca się od __DynamicModule_, a następnie identyfikator GUID określający ścieżkę modułu dynamicznego.

Typ:String
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:False

-ReturnResult

Wskazuje, że to polecenie cmdlet uruchamia blok skryptu i zwraca wyniki bloku skryptu zamiast zwracać obiekt modułu.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-ScriptBlock

Określa zawartość modułu dynamicznego. Dołącz zawartość w nawiasach klamrowych ({}), aby utworzyć blok skryptu. Ten parametr jest wymagany.

Typ:ScriptBlock
Position:1
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

Dane wejściowe

String

Możesz przekazać nazwę modułu do tego polecenia cmdlet.

Dane wyjściowe

PSModuleInfo

To polecenie cmdlet domyślnie generuje obiekt PSModuleInfo.

PSCustomObject

Jeśli używasz parametru AsCustomObject, generuje obiekt PSCustomObject.

Object

Jeśli używasz parametru ReturnResult, to polecenie cmdlet zwraca wynik oceny bloku skryptu w module dynamicznym.

Uwagi

Program PowerShell zawiera następujące aliasy dla New-Module:

  • Wszystkie platformy:
    • nmo