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


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, передайте команду в Import-Module или переведите New-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 Name присваивает понятное имя модулю. Так как Import-Module по умолчанию объекты не возвращаются, выходные данные этой команды отсутствуют. Get-ModuleЗначение "Приветствие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-Command показывает функцию Hello , экспортируемую динамическим модулем.

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

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

Командлет 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 этот командлет возвращает результат оценки блока скрипта в динамическом модуле.

Примечания

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

  • nmo

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