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 для переопределения значений по умолчанию.
Вы также можете использовать параметр AsCustomObjectNew-Module для возврата динамического модуля в качестве настраиваемого объекта. Члены модулей, такие как функции, реализуются как методы скрипта пользовательского объекта, а не импортируются в сеанс.
Динамические модули существуют только в памяти, а не на диске. Как и все модули, члены динамических модулей выполняются в частной области модуля, которая является дочерним элементом глобальной области. Get-Module не удается получить динамический модуль, но Get-Command может получить экспортированные члены.
Чтобы сделать динамический модуль доступным для Get-Module, переведите команду New-Module в import-Module или переведите объект модуля, который New-Module возвращается в import-Module. Это действие добавляет динамический модуль в список get-Module, но не сохраняет модуль на диск или делает его постоянным.
Примеры
Пример 1. Создание динамического модуля
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 : {}
Эта команда создает динамический модуль с функцией Hello. Команда возвращает объект модуля, представляющий новый динамический модуль.
Пример 2. Работа с динамическими модулями и 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!"
В этом примере показано, что динамические модули не возвращаются командлетом get-Module
Пример 3. Экспорт переменной в текущий сеанс
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
Эта команда использует командлет Export-ModuleMember для экспорта переменной в текущий сеанс. Без команды Export-ModuleMember экспортируется только функция.
Выходные данные показывают, что переменная и функция были экспортированы в сеанс.
Пример 4. Предоставление динамического модуля Get-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-Module путем отправки динамического модуля в импорт-модуль.
Первая команда использует оператор конвейера (|) для отправки объекта модуля, который новый модуль создает командлет Import-Module. Команда использует параметр NameNew-Module, чтобы назначить понятное имя модулю. Так как import-Module не возвращает объекты по умолчанию, выходные данные этой команды отсутствуют.
Вторая команда использует Get-Module для получения модулей в сеансе. В результате показано, что Get-Module может получить новый динамический модуль.
Третья команда использует командлет Get-Command для получения функции Hello, экспортируемой динамическим модулем.
Пример 5. Создание пользовательского объекта с экспортируемыми функциями
$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
В этом примере показано, как использовать параметр asCustomObject New-Module для создания пользовательского объекта, имеющего методы скрипта, представляющие экспортированные функции.
Первая команда использует командлет New-Module для создания динамического модуля с двумя функциями Hello и Goodbye.
Команда использует параметр
Вторая команда пытается отобразить значение переменной $m. Содержимое не отображается.
Третья команда использует оператор конвейера для отправки пользовательского объекта в командлет get-Member
Четвертые и пятые команды используют формат метода скрипта для вызова функций Hello и Goodbye.
Пример 6. Получение результатов блока скрипта
New-Module -ScriptBlock {function SayHello {"Hello, World!"}; SayHello} -ReturnResult
Hello, World!
Эта команда использует параметр ReturnResult для запроса результатов выполнения блока скрипта вместо запроса объекта модуля.
Блок скрипта в новом модуле определяет функцию SayHello, а затем вызывает функцию.
Параметры
-ArgumentList
Задает массив аргументов, которые являются значениями параметров, передаваемыми в блок скрипта.
Тип: | 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.