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

[玩转系统] 导入 PowerShell 模块

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

导入 PowerShell 模块


在系统上安装模块后,您可能需要导入该模块。导入是将模块加载到活动内存中的过程,以便用户可以在其 PowerShell 会话中访问该模块。在 PowerShell 2.0 中,您可以通过调用 Import-Module cmdlet 导入新安装的 PowerShell 模块。在 PowerShell 3.0 中,当用户调用模块中的函数或 cmdlet 之一时,PowerShell 能够隐式导入模块。请注意,这两个版本都假设您将模块安装在 PowerShell 能够找到它的位置;有关更多信息,请参阅安装 PowerShell 模块。您可以使用模块清单来限制导出模块的哪些部分,并且可以使用 Import-Module 调用的参数来限制导入哪些部分。

导入管理单元 (PowerShell 1.0)

PowerShell 1.0 中不存在模块:相反,您必须注册并使用管理单元。但是,目前不建议您使用此技术,因为模块通常更容易安装和导入。有关详细信息,请参阅如何创建 Windows PowerShell 管理单元。

使用 Import-Module 导入模块 (PowerShell 2.0)

PowerShell 2.0 使用适当命名的 Import-Module cmdlet 来导入模块。运行此 cmdlet 时,Windows PowerShell 在 PSModulePath 变量中指定的目录中搜索指定的模块。找到指定的目录后,Windows PowerShell 按以下顺序搜索文件:模块清单文件 (.psd1)、脚本模块文件 (.psm1)、二进制模块文件 (.dll)。有关将目录添加到搜索的详细信息,请参阅 about_PSModulePath。以下代码描述了如何导入模块:

Import-Module myModule

假设 myModule 位于 PSModulePath 中,PowerShell 会将 myModule 加载到活动内存中。如果 myModule 未位于 PSModulePath 路径上,您仍然可以明确告诉 PowerShell 在哪里可以找到它:

Import-Module -Name C:\myRandomDirectory\myModule -Verbose

您还可以使用 -Verbose 参数来标识从模块中导出的内容以及将哪些内容导入到活动内存中。导出和导入都限制向用户公开的内容:区别在于谁在控制可见性。本质上,导出是由模块内的代码控制的。相反,导入由 Import-Module 调用控制。有关详细信息,请参阅下面的限制导入的成员

隐式导入模块 (PowerShell 3.0)

从 Windows PowerShell 3.0 开始,当在命令中使用模块中的任何 cmdlet 或函数时,会自动导入模块。此功能适用于 PSModulePath 环境变量值中包含的目录中的任何模块。但是,如果您没有将模块保存在有效路径上,您仍然可以使用如上所述的显式 Import-Module 选项加载它们。

以下操作会触发模块的自动导入,也称为“模块自动加载”。

  • 在命令中使用 cmdlet。例如,输入 Get-ExecutionPolicy 会导入包含 Get-ExecutionPolicy cmdlet 的 Microsoft.PowerShell.Security 模块。

  • 使用 Get-Command cmdlet 获取命令。例如,输入 Get-Command Get-JobTrigger 导入包含 Get-JobTrigger cmdlet 的 PSScheduledJob 模块。包含通配符的 Get-Command 命令被视为发现命令,不会触发模块的导入。

  • 使用 Get-Help cmdlet 获取 cmdlet 的帮助。例如,输入 Get-Help Get-WinEvent 会导入包含 Get-WinEvent cmdlet 的 Microsoft.PowerShell.Diagnostics 模块。

为了支持自动导入模块,Get-Command cmdlet 会获取所有已安装模块中的所有 cmdlet 和函数,即使该模块未导入到会话中也是如此。有关详细信息,请参阅 Get-Command cmdlet 的帮助主题。

进口流程

导入模块时,将为该模块创建一个新的会话状态,并在内存中创建一个 System.Management.Automation.PSModuleInfo 对象。为每个导入的模块创建会话状态(这包括根模块和任何嵌套模块)。然后,将从根模块导出的成员(包括由任何嵌套模块导出到根模块的任何成员)导入到调用方的会话状态中。

从模块导出的成员的元数据具有 ModuleName 属性。该属性由导出它们的模块的名称填充。

警告

如果导出的成员的名称使用未经批准的动词或者成员的名称使用受限字符,则运行 Import-Module cmdlet 时会显示警告。

默认情况下,Import-Module cmdlet 不会将任何对象返回到管道。但是,该 cmdlet 支持 PassThru 参数,该参数可用于为导入的每个模块返回 System.Management.Automation.PSModuleInfo 对象。要将输出发送到主机,用户应运行 Write-Host cmdlet。

限制导入成员

当使用 Import-Module cmdlet 导入模块时,默认情况下,所有导出的模块成员都会导入到会话中,包括由嵌套模块导出到模块的任何命令。默认情况下,不导出变量和别名。要限制导出的成员,请使用模块清单。要限制导入的成员,请使用 Import-Module cmdlet 的以下参数。

  • 函数:此参数限制导出的函数。 (如果您使用模块清单,请参阅 FunctionsToExport 键。)

  • `Cmdlet:此参数限制导出的 cmdlet(如果您使用的是模块清单,请参阅 CmdletsToExport 键。)

  • 变量:此参数限制导出的变量(如果您使用模块清单,请参阅 VariablesToExport 键。)

  • 别名:此参数限制导出的别名(如果您使用模块清单,请参阅 AliasesToExport 键。)

参见

编写 Windows PowerShell 模块

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

取消回复欢迎 发表评论:

关灯