在系统上安装模块后,可能需要导入该模块。 导入是将模块加载到活动内存中的过程,以便用户可以在其 PowerShell 会话中访问该模块。 在 PowerShell 2.0 中,可以通过调用 Import-Module cmdlet 导入新安装的 PowerShell 模块。 在 PowerShell 3.0 中,当用户调用模块中的某个函数或 cmdlet 时,PowerShell 可以隐式导入模块。 请注意,这两个版本都假定你在 PowerShell 能够找到它的位置安装模块;有关详细信息,请参阅 安装 PowerShell 模块。 可以使用模块清单来限制导出模块的哪些部分,可以使用 Import-Module
调用的参数来限制导入哪些部件。
导入 Snap-In (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 密钥)。