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
для переопределения значений по умолчанию.
Можно также использовать параметр
Динамические модули существуют только в памяти, а не на диске. Как и все модули, члены динамических модулей выполняются в частной области модуля, которая является дочерним элементом глобальной области. 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 |
Входные данные
Имя модуля можно передать этому командлету.
Выходные данные
System.Management.Automation.PSModuleInfo, System.Management.Automation.PSCustomObject, or None
Этот командлет создает объект PSModuleInfo по умолчанию. Если используется параметр asCustomObject
Примечания
Вы также можете ссылаться на New-Module
по его псевдониму, nmo
. Дополнительные сведения см. в about_Aliases.