Создает новый динамический модуль, который существует только в памяти.

Синтаксис

New-Module [-Name] <string> [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Function <string[]>] [-ReturnResult] [<CommonParameters>]

New-Module [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Function <string[]>] [-ReturnResult] [<CommonParameters>]

Описание

Командлет New-Module создает динамический модуль из блока скрипта. Элементы динамического модуля, например функции и переменные, становятся немедленно доступны в рамках сеанса и остаются доступными до завершения сеанса.

Как и для статических модулей, для динамического модуля по умолчанию экспортируются командлеты и функции, но не экспортируются переменные и псевдонимы. Однако настройки по умолчанию можно изменить с помощью командлета Export-ModuleMember и параметров New-Module.

Динамические модули существуют только в памяти, а не на диске. Как и элементы всех модулей, элементы динамических модулей выполняются в закрытой области модуля, являющейся дочерней областью глобальной области. Командлет Get-Module не может получить динамический модуль, но командлет Get-Command может получить экспортируемые элементы.

Чтобы сделать динамический модуль доступным командлету Get-Module, передайте команду New-Module по конвейеру командлету Import-Module или передайте командлету Import-Module по конвейеру объект модуля, возвращенный командой New-Module. Это действие добавляет динамический модуль в список Get-Module, но не сохраняет модуль на диск и не делает модуль постоянно существующим.

Параметры

-ArgumentList <Object[]>

Указывает аргументы (значения параметров), которые передаются блоку скрипта.

Обязательно?

false

Позиция?

named

Значение по умолчанию

нет

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-AsCustomObject

Возвращает пользовательский объект с элементами, представляющими элементы модуля.

При использовании параметра AsCustomObject команда New-Module создает динамический модуль, импортирует элементы модуля в текущий сеанс и возвращает объект PSCustomObject, а не объект PSModuleInfo. Можно сохранить пользовательский объект в переменной и использовать точку для обращения к его элементам.

Если модуль содержит несколько элементов с одинаковым именем, например функцию и переменную с именем "A", из пользовательского объекта доступен только один элемент с каждым из имен.

Обязательно?

false

Позиция?

named

Значение по умолчанию

нет

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Cmdlet <string[]>

Экспортирует только указанные командлеты из модуля в текущий сеанс. Введите список командлетов, разделенных запятыми. Подстановочные знаки разрешены. По умолчанию экспортируются все командлеты из модуля.

В блоке скрипта нельзя определять командлеты, но динамический модуль может содержать командлеты, если он импортирует их из двоичного модуля.

Обязательно?

false

Позиция?

named

Значение по умолчанию

нет

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

true

-Function <string[]>

Экспортирует только указанные функции из модуля в текущий сеанс. Введите список функций, разделенных запятыми. Подстановочные знаки разрешены. По умолчанию экспортируются все функции, определенные в модуле.

Обязательно?

false

Позиция?

named

Значение по умолчанию

нет

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

true

-Name <string>

Задает имя нового модуля. Кроме того, можно передать имя модуля командлету New-Module по конвейеру.

Значение по умолчанию представляет собой созданное автоматически имя, которое начинается со строки "__DynamicModule_" и заканчивается GUID, представляющим собой путь к динамическому модулю.

Обязательно?

true

Позиция?

1

Значение по умолчанию

"__DynamicModule_" + GUID

Принимать входные данные из конвейера?

true (ByValue)

Принимать подстановочные знаки?

false

-ReturnResult

Выполняет блок скрипта и возвращает результаты блока скрипта вместо возврата объекта модуля.

Обязательно?

false

Позиция?

named

Значение по умолчанию

False

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-ScriptBlock <scriptblock>

Задает содержимое динамического модуля. Чтобы создать блок скрипта, заключите содержимое в скобки ( { } ). Это обязательный параметр.

Обязательно?

true

Позиция?

1

Значение по умолчанию

нет

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

<CommonParameters>

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Ввод и вывод

Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.

Входные данные

System.String

Можно передать строку с именем модуля командлету New-Module по конвейеру.

Выходные данные

System.Management.Automation.PSModuleInfo, System.Management.Automation.PSCustomObject или None

По умолчанию командлет New-Module создает объект PSModuleInfo. Если используется параметр AsCustomObject, командлет создает объект PSCustomObject. Если используется параметр ReturnResult, он возвращает результат обработки блока скрипта в динамическом модуле.

Примечания

Командлет New-Module также можно вызывать с помощью псевдонима "nmo". Дополнительные сведения см. в разделе about_Aliases.

Пример 1

C:\PS>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     : {}

Описание
-----------
Эта команда создает новый динамический модуль с функцией "Hello". Команда возвращает объект модуля, представляющий новый динамический модуль.






Пример 2

C:\PS>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     : {}

C:\PS> get-module
C:\PS>

C:\PS> get-command Hello

CommandType     Name   Definition
-----------     ----   ----------
Function        Hello  "Hello!"

Описание
-----------
В этом примере показано, что динамические модули не возвращаются командлетом Get-Module, но их экспортируемые элементы возвращаются командлетом Get-Command.






Пример 3

C:\PS>New-Module -scriptblock {$SayHelloHelp="Type 'SayHello', a space, and a name."; function SayHello ($name) { "Hello, $name" }; Export-ModuleMember -function SayHello -Variable SayHelloHelp}

C:\PS> $SayHelloHelp
Type 'SayHello', a space, and a name.

C:\PS> SayHello Jeffrey
Hello, Jeffrey

Описание
-----------
Эта команда использует командлет Export-ModuleMember для экспорта переменной в текущий сеанс. Если команда Export-ModuleMember не используется, экспортируется только функция.

В выходных данных показано, что в сеанс были экспортированы и переменная, и функция.






Пример 4

C:\PS>new-module -scriptblock {function Hello {"Hello!"}} -name GreetingModule | import-module

C:\PS> 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     : {}


C:\PS> get-command hello

CommandType     Name                                                               Definition
-----------     ----                                                               ----------
Function        Hello                                                              "Hello!"

Описание
-----------
Эта команда демонстрирует, как сделать динамический модуль доступным для командлета Get-Module, передав динамический модуль по конвейеру командлету Import-Module.

Первая команда использует оператор конвейера (|) для отправки объекта модуля, созданного командлетом New-Module, командлету Import-Module. Команда использует параметр Name командлета New-Module для назначения модулю понятного имени. Поскольку по умолчанию командлет Import-Module не возвращает никаких объектов, у этой команды нет выходных данных.

Вторая команда получает все модули в рамках сеанса с помощью командлета Get-Module. В результатах показано, что командлет Get-Module может получить новый динамический модуль.

Третья команда использует командлет Get-Command для получения экспортируемой динамическим модулем функции Hello.






Пример 5

C:\PS>$m = new-module -scriptblock {function Hello ($name) {"Hello, $name"}; function Goodbye ($name) {"Goodbye, $name"}} -AsCustomObject

C:\PS> $m

C:\PS> $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();

PS C:\ps-test> $m.goodbye("Jane")
Goodbye, Jane

PS C:\ps-test> $m.hello("Manoj")
Hello, Manoj

PS C:\ps-test> goodbye Jane
Goodbye, Jane

PS C:\ps-test> hello Manoj
Hello, Manoj

Описание
-----------
В этом примере показано, как использовать параметр AsCustomObject командлета New-Module для создания пользовательского объекта с методами-скриптами, отражающими экспортированные функции.

Первая команда использует командлет New-Module для создания динамического модуля с двумя функциями, Hello и Goodbye. Команда использует параметр AsCustomObject для создания пользовательского объекта, а не объекта PSModuleInfo, который создается командлетом New-Module по умолчанию. Полученный пользовательский объект сохраняется в переменной $m.

Вторая команда пытается отобразить значение переменной $m. На экране не отображается ничего.

Третья команда использует оператор конвейера (|) для отправки пользовательского объекта командлету Get-Member, который отображает свойства и методы пользовательского объекта. В выходных данных показано, что у объекта есть методы-скрипты, представляющие функции Hello и Goodbye.

Четвертая и пятая команды используют формат метода-скрипта для вызова функций Hello и Goodbye. 
 
Шестая и седьмая команды вызывают функции с указанием имени функции и значения параметра.






Пример 6

C:\PS>new-module -scriptblock {function SayHello {"Hello, World!"}; SayHello} -returnResult

Hello, World!

Описание
-----------
Эта команда использует параметр ReturnResult, чтобы запросить результаты выполнения блока скрипта вместо запроса объекта модуля. 

Блок скрипта в новом модуле определяет функцию SayHello, а затем вызывает ее.






См. также




Содержание