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


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