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


New-Module

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

Синтаксис

ScriptBlock (по умолчанию)

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

Name

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

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:Аргументы

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-AsCustomObject

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

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

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Cmdlet

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

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

Свойства параметра

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Function

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

Свойства параметра

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:True
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Name

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

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

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

Name
Position:0
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-ReturnResult

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

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-ScriptBlock

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

Свойства параметра

Тип:ScriptBlock
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:1
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.

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

String

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

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

PSModuleInfo

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

PSCustomObject

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

Object

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

Примечания

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

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