当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] New-Module (Microsoft.PowerShell.Core)

作者:精品下载站 日期:2024-12-14 02:15:22 浏览:15 分类:玩电脑

New-Module (Microsoft.PowerShell.Core)


New-Module

模块 :Microsoft.PowerShell.Core

创建仅存在于内存中的新动态模块。

句法

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 cmdlet 从脚本块创建动态模块。动态模块的成员(例如函数和变量)在会话中立即可用,并且在您关闭会话之前一直保持可用。

与静态模块一样,默认情况下,动态模块中的 cmdlet 和函数会被导出,而变量和别名则不会。但是,您可以使用 Export-ModuleMember cmdlet 和 New-Module 参数来覆盖默认值。

您还可以使用 New-ModuleAsCustomObject 参数将动态模块作为自定义对象返回。模块的成员(例如函数)作为自定义对象的脚本方法实现,而不是导入到会话中。

动态模块仅存在于内存中,而不存在于磁盘上。与所有模块一样,动态模块的成员在私有模块作用域中运行,该作用域是全局作用域的子级。 Get-Module 无法获取动态模块,但 Get-Command 可以获取导出的成员。

要使动态模块可供 Get-Module 使用,请将 New-Module 命令通过管道传输到 Import-Module,或通过管道传输 New-Module 的模块对象code> 返回到 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 cmdlet 不会返回动态模块。它们导出的成员由 Get-Command cmdlet 返回。

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 cmdlet 将变量导出到当前会话中。如果没有 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 使用

此示例演示了您可以通过将动态模块通过管道传输到 Import-Module 来使动态模块可供 Get-Module 使用。

New-Module 创建一个通过管道传输到 Import-Module cmdlet 的模块对象。 New-ModuleName 参数为模块分配一个友好的名称。由于 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 cmdlet 显示动态模块导出的 Hello 函数。

示例 5:生成具有导出函数的自定义对象

此示例演示如何使用 New-ModuleAsCustomObject 参数生成具有表示导出函数的脚本方法的自定义对象。

New-Module cmdlet 创建一个具有两个函数的动态模块:HelloGoodbyeAsCustomObject 参数创建自定义对象,而不是 New-Module 默认生成的 PSModuleInfo 对象。此自定义对象保存在 $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 cmdlet 将显示自定义对象的属性和方法。输出显示该对象具有表示 HelloGoodbye 函数的脚本方法。最后,我们调用这些脚本方法并显示结果。

示例6:获取脚本块的结果

此示例使用 ReturnResult 参数来请求运行脚本块的结果,而不是请求模块对象。新模块中的脚本块定义了 SayHello 函数,然后调用该函数。

New-Module -ScriptBlock {function SayHello {"Hello, World!"}; SayHello} -ReturnResult

Hello, World!

参数

-ArgumentList

指定参数数组,这些参数是传递给脚本块的参数值。有关 ArgumentList 行为的更多信息,请参阅 about_Splatting。

类型 :

Object[]

别名:

Args

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-AsCustomObject

指示此 cmdlet 返回表示动态模块的自定义对象。模块成员作为自定义对象的脚本方法实现,但不会导入到会话中。您可以将自定义对象保存在变量中并使用点表示法来调用成员。

如果模块有多个同名成员,例如函数和变量都命名为 A,则自定义对象只能访问每个名称的一个成员。

类型 :

SwitchParameter

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Cmdlet

指定此 cmdlet 从模块导出到当前会话的 cmdlet 数组。输入以逗号分隔的 cmdlet 列表。允许使用通配符。默认情况下,模块中的所有 cmdlet 都会被导出。

您无法在脚本块中定义 cmdlet,但如果动态模块从二进制模块导入 cmdlet,则可以包含 cmdlet。

类型 :

String[]

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Function

指定此 cmdlet 从模块导出到当前会话的函数数组。输入以逗号分隔的函数列表。允许使用通配符。默认情况下,模块中定义的所有函数都会被导出。

类型 :

String[]

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

True

-Name

指定新模块的名称。您还可以通过管道将模块名称传递给 New-Module。

默认值是自动生成的名称,以 __DynamicModule_ 开头,后跟指定动态模块路径的 GUID。

类型 :

String

位置:

0

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-ReturnResult

指示此 cmdlet 运行脚本块并返回脚本块结果,而不是返回模块对象。

类型 :

SwitchParameter

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-ScriptBlock

指定动态模块的内容。将内容括在大括号 ({}) 中以创建脚本块。此参数是必需的。

类型 :

ScriptBlock

位置:

1

默认值:

None

必需的:

True

接受管道输入:

False

接受通配符:

False

输入

字符串

您可以通过管道将模块名称传递给此 cmdlet。

输出

PSModuleInfo

默认情况下,此 cmdlet 生成一个 PSModuleInfo 对象。

PS自定义对象

如果您使用 AsCustomObject 参数,它将生成一个 PSCustomObject 对象。

对象

如果使用 ReturnResult 参数,此 cmdlet 将返回动态模块中脚本块的计算结果。

笔记

PowerShell 包含以下 New-Module 别名:

  • 所有平台:

      nmo

    您需要 登录账户 后才能发表评论

    取消回复欢迎 发表评论:

    关灯