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


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 из New-Module для возврата динамического модуля как пользовательский объект. Члены модулей, такие как функции, реализуются как методы скрипта пользовательского объекта, а не импортируются в сеанс.

Динамические модули существуют только в памяти, а не на диске. Как и все модули, члены динамических модулей выполняются в частной области модуля, которая является дочерним элементом глобальной области. 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. Параметр Имя модуля New-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

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

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

PSModuleInfo

Этот командлет создает объект PSModuleInfo по умолчанию.

PSCustomObject

Если используется параметр asCustomObject, он создает объект PSCustomObject.

Object

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

Примечания

PowerShell включает следующие псевдонимы для New-Module:

  • Все платформы:
    • nmo