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


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 для переопределения значений по умолчанию.

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

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

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

Примеры

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

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

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

Пример 2. Работа с динамическими модулями и Get-Module и Get-Command

В этом примере показано, что динамические модули не возвращаются командлетом 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!"

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

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

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

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

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

В этом примере показано, что динамический модуль доступен для Get-Module путем подключения динамического модуля к Import-Module.

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

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-Command отображает функцию Hello, экспортируемую динамическим модулем.

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

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

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

$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

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

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

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

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

Hello, World!

Параметры

-ArgumentList

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

Тип: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.