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
для переопределения значений по умолчанию.
Вы также можете использовать параметр AsCustomObject для New-Module
возврата динамического модуля в качестве настраиваемого объекта. Элементы модулей, например функции, не импортируются в сеанс, а реализуются в виде методов скриптов пользовательского объекта.
Динамические модули существуют только в памяти, а не на диске. Как и элементы всех остальных модулей, элементы динамических модулей выполняются в закрытой области модуля, являющейся дочерней областью глобальной области. Командлет Get-Module не может получить динамический модуль, но командлет Get-Command может получить экспортированные элементы.
Чтобы сделать динамический модуль доступным Get-Module
, передайте команду в Import-Module или переведите New-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
Name присваивает понятное имя модулю. Так как Import-Module
по умолчанию объекты не возвращаются, выходные данные этой команды отсутствуют. Get-Module
Значение "Приветствие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-Command
показывает функцию Hello
, экспортируемую динамическим модулем.
Пример 5. Создание пользовательского объекта с экспортируемыми функциями
В этом примере показано, как использовать параметр New-Module
AsCustomObject для создания пользовательского объекта, имеющего методы скрипта, представляющие экспортированные функции.
Командлет 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 |
Входные данные
Имя модуля можно передать этому командлету.
Выходные данные
Этот командлет создает объект PSModuleInfo по умолчанию.
Если используется параметр AsCustomObject , он создает объект PSCustomObject .
При использовании параметра ReturnResult этот командлет возвращает результат оценки блока скрипта в динамическом модуле.
Примечания
PowerShell включает следующие псевдонимы для New-Module
:
- Все платформы:
nmo
Связанные ссылки
PowerShell