Создает новый динамический модуль, который существует только в памяти.
Синтаксис
New-Module [-Name] <string> [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Function <string[]>] [-ReturnResult] [<CommonParameters>] New-Module [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Function <string[]>] [-ReturnResult] [<CommonParameters>]
Описание
Командлет New-Module создает динамический модуль из блока скрипта. Элементы динамического модуля, например функции и переменные, становятся немедленно доступны в рамках сеанса и остаются доступными до завершения сеанса.
Как и для статических модулей, для динамического модуля по умолчанию экспортируются командлеты и функции, но не экспортируются переменные и псевдонимы. Однако настройки по умолчанию можно изменить с помощью командлета Export-ModuleMember и параметров New-Module.
Динамические модули существуют только в памяти, а не на диске. Как и элементы всех модулей, элементы динамических модулей выполняются в закрытой области модуля, являющейся дочерней областью глобальной области. Командлет Get-Module не может получить динамический модуль, но командлет Get-Command может получить экспортируемые элементы.
Чтобы сделать динамический модуль доступным командлету Get-Module, передайте команду New-Module по конвейеру командлету Import-Module или передайте командлету Import-Module по конвейеру объект модуля, возвращенный командой New-Module. Это действие добавляет динамический модуль в список Get-Module, но не сохраняет модуль на диск и не делает модуль постоянно существующим.
Параметры
-ArgumentList <Object[]>
Указывает аргументы (значения параметров), которые передаются блоку скрипта.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
нет |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-AsCustomObject
Возвращает пользовательский объект с элементами, представляющими элементы модуля.
При использовании параметра AsCustomObject команда New-Module создает динамический модуль, импортирует элементы модуля в текущий сеанс и возвращает объект PSCustomObject, а не объект PSModuleInfo. Можно сохранить пользовательский объект в переменной и использовать точку для обращения к его элементам.
Если модуль содержит несколько элементов с одинаковым именем, например функцию и переменную с именем "A", из пользовательского объекта доступен только один элемент с каждым из имен.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
нет |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-Cmdlet <string[]>
Экспортирует только указанные командлеты из модуля в текущий сеанс. Введите список командлетов, разделенных запятыми. Подстановочные знаки разрешены. По умолчанию экспортируются все командлеты из модуля.
В блоке скрипта нельзя определять командлеты, но динамический модуль может содержать командлеты, если он импортирует их из двоичного модуля.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
нет |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
true |
-Function <string[]>
Экспортирует только указанные функции из модуля в текущий сеанс. Введите список функций, разделенных запятыми. Подстановочные знаки разрешены. По умолчанию экспортируются все функции, определенные в модуле.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
нет |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
true |
-Name <string>
Задает имя нового модуля. Кроме того, можно передать имя модуля командлету New-Module по конвейеру.
Значение по умолчанию представляет собой созданное автоматически имя, которое начинается со строки "__DynamicModule_" и заканчивается GUID, представляющим собой путь к динамическому модулю.
Обязательно? |
true |
Позиция? |
1 |
Значение по умолчанию |
"__DynamicModule_" + GUID |
Принимать входные данные из конвейера? |
true (ByValue) |
Принимать подстановочные знаки? |
false |
-ReturnResult
Выполняет блок скрипта и возвращает результаты блока скрипта вместо возврата объекта модуля.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
False |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-ScriptBlock <scriptblock>
Задает содержимое динамического модуля. Чтобы создать блок скрипта, заключите содержимое в скобки ( { } ). Это обязательный параметр.
Обязательно? |
true |
Позиция? |
1 |
Значение по умолчанию |
нет |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
<CommonParameters>
Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.
Ввод и вывод
Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.
Входные данные |
System.String Можно передать строку с именем модуля командлету New-Module по конвейеру. |
Выходные данные |
System.Management.Automation.PSModuleInfo, System.Management.Automation.PSCustomObject или None По умолчанию командлет New-Module создает объект PSModuleInfo. Если используется параметр AsCustomObject, командлет создает объект PSCustomObject. Если используется параметр ReturnResult, он возвращает результат обработки блока скрипта в динамическом модуле. |
Примечания
Командлет New-Module также можно вызывать с помощью псевдонима "nmo". Дополнительные сведения см. в разделе about_Aliases.
Пример 1
C:\PS>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
C:\PS>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 : {} C:\PS> get-module C:\PS> C:\PS> get-command Hello CommandType Name Definition ----------- ---- ---------- Function Hello "Hello!" Описание ----------- В этом примере показано, что динамические модули не возвращаются командлетом Get-Module, но их экспортируемые элементы возвращаются командлетом Get-Command.
Пример 3
C:\PS>New-Module -scriptblock {$SayHelloHelp="Type 'SayHello', a space, and a name."; function SayHello ($name) { "Hello, $name" }; Export-ModuleMember -function SayHello -Variable SayHelloHelp} C:\PS> $SayHelloHelp Type 'SayHello', a space, and a name. C:\PS> SayHello Jeffrey Hello, Jeffrey Описание ----------- Эта команда использует командлет Export-ModuleMember для экспорта переменной в текущий сеанс. Если команда Export-ModuleMember не используется, экспортируется только функция. В выходных данных показано, что в сеанс были экспортированы и переменная, и функция.
Пример 4
C:\PS>new-module -scriptblock {function Hello {"Hello!"}} -name GreetingModule | import-module C:\PS> 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 : {} C:\PS> get-command hello CommandType Name Definition ----------- ---- ---------- Function Hello "Hello!" Описание ----------- Эта команда демонстрирует, как сделать динамический модуль доступным для командлета Get-Module, передав динамический модуль по конвейеру командлету Import-Module. Первая команда использует оператор конвейера (|) для отправки объекта модуля, созданного командлетом New-Module, командлету Import-Module. Команда использует параметр Name командлета New-Module для назначения модулю понятного имени. Поскольку по умолчанию командлет Import-Module не возвращает никаких объектов, у этой команды нет выходных данных. Вторая команда получает все модули в рамках сеанса с помощью командлета Get-Module. В результатах показано, что командлет Get-Module может получить новый динамический модуль. Третья команда использует командлет Get-Command для получения экспортируемой динамическим модулем функции Hello.
Пример 5
C:\PS>$m = new-module -scriptblock {function Hello ($name) {"Hello, $name"}; function Goodbye ($name) {"Goodbye, $name"}} -AsCustomObject C:\PS> $m C:\PS> $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(); PS C:\ps-test> $m.goodbye("Jane") Goodbye, Jane PS C:\ps-test> $m.hello("Manoj") Hello, Manoj PS C:\ps-test> goodbye Jane Goodbye, Jane PS C:\ps-test> hello Manoj Hello, Manoj Описание ----------- В этом примере показано, как использовать параметр AsCustomObject командлета New-Module для создания пользовательского объекта с методами-скриптами, отражающими экспортированные функции. Первая команда использует командлет New-Module для создания динамического модуля с двумя функциями, Hello и Goodbye. Команда использует параметр AsCustomObject для создания пользовательского объекта, а не объекта PSModuleInfo, который создается командлетом New-Module по умолчанию. Полученный пользовательский объект сохраняется в переменной $m. Вторая команда пытается отобразить значение переменной $m. На экране не отображается ничего. Третья команда использует оператор конвейера (|) для отправки пользовательского объекта командлету Get-Member, который отображает свойства и методы пользовательского объекта. В выходных данных показано, что у объекта есть методы-скрипты, представляющие функции Hello и Goodbye. Четвертая и пятая команды используют формат метода-скрипта для вызова функций Hello и Goodbye. Шестая и седьмая команды вызывают функции с указанием имени функции и значения параметра.
Пример 6
C:\PS>new-module -scriptblock {function SayHello {"Hello, World!"}; SayHello} -returnResult Hello, World! Описание ----------- Эта команда использует параметр ReturnResult, чтобы запросить результаты выполнения блока скрипта вместо запроса объекта модуля. Блок скрипта в новом модуле определяет функцию SayHello, а затем вызывает ее.