Поделиться через


New-Module

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

Синтаксис

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

Описание

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

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

Вы также можете использовать параметр AsCustomObjectNew-Module для возврата динамического модуля в качестве настраиваемого объекта. Члены модулей, такие как функции, реализуются как методы скрипта пользовательского объекта, а не импортируются в сеанс.

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

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

Примеры

Пример 1. Создание динамического модуля

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. Работа с динамическими модулями и Get-Module и 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!"

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

Пример 3. Экспорт переменной в текущий сеанс

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

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

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

Пример 4. Предоставление динамического модуля Get-Module

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

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

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

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

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

Пример 5. Создание пользовательского объекта с экспортируемыми функциями

$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

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

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

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

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

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

Пример 6. Получение результатов блока скрипта

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

Hello, World!

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

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

Параметры

-ArgumentList

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

Тип:Object[]
Aliases:Args
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-AsCustomObject

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

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

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Cmdlet

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

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

Тип:String[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Function

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

Тип:String[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-Name

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

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

Тип:String
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-ReturnResult

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

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-ScriptBlock

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

Тип:ScriptBlock
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

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

String

Имя модуля можно передать этому командлету.

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

System.Management.Automation.PSModuleInfo, System.Management.Automation.PSCustomObject, or None

Этот командлет создает объект PSModuleInfo по умолчанию. Если используется параметр asCustomObject , он создает объект PSCustomObject. Если вы используете параметр ReturnResult, он возвращает результат оценки блока скрипта в динамическом модуле.

Примечания

  • Вы также можете ссылаться на New-Module по его псевдониму, nmo. Дополнительные сведения см. в about_Aliases.