是否有理由显式导入模块?
Is there ever a reason to explicitly Import-Module?
我刚刚阅读了 PowerShell Modules 指南页面,我注意到 Import-Module
部分有一行:
The following actions trigger automatic importing of a module, also
known as "module auto-loading."
- Using a cmdlet in a command. For
example, typing Get-ExecutionPolicy imports the
Microsoft.PowerShell.Security module that contains the
Get-ExecutionPolicy cmdlet.
既然如此,我们为什么还要关心使用 Import-Module
?它不是一直自动照顾我们吗?在什么情况下我需要明确写出 Import-Module
?
以下情况必须使用Import-Module
:
- 模块文件不在
$PSModule
路径 中包含的路径中
- 您有不同的同名模块,但路径不同
- 模块已经加载,修改后重新加载。 (带 -Force)
- 仅从该模块导入特定的 cmdlet、函数或变量(分别使用
-Cmdlet
、-Function
和 -Variable
参数)
- 防止从模块加载 cmdlet 或函数会覆盖具有相同名称且已加载到当前会话中的命令(使用
-NoClobber
)
- 为本模块中的 cmdlet 的名词添加前缀(with
-Prefix
)
- 从远程计算机导入模块(使用
-PSSession
参数)
该列表并不完全详尽,但这些是 Import-Module
cmdlet 的主要用例。
我知道已经有一个可接受的答案,但我想补充两分钱。
- 明确记录脚本对模块的依赖性
- 如果 $PSModuleAutoloadingPreference 设置为 "none",则需要显式加载模块。您不知道用户是否关闭了此功能。
我刚刚阅读了 PowerShell Modules 指南页面,我注意到 Import-Module
部分有一行:
The following actions trigger automatic importing of a module, also known as "module auto-loading."
- Using a cmdlet in a command. For example, typing Get-ExecutionPolicy imports the Microsoft.PowerShell.Security module that contains the Get-ExecutionPolicy cmdlet.
既然如此,我们为什么还要关心使用 Import-Module
?它不是一直自动照顾我们吗?在什么情况下我需要明确写出 Import-Module
?
以下情况必须使用Import-Module
:
- 模块文件不在
$PSModule
路径 中包含的路径中
- 您有不同的同名模块,但路径不同
- 模块已经加载,修改后重新加载。 (带 -Force)
- 仅从该模块导入特定的 cmdlet、函数或变量(分别使用
-Cmdlet
、-Function
和-Variable
参数) - 防止从模块加载 cmdlet 或函数会覆盖具有相同名称且已加载到当前会话中的命令(使用
-NoClobber
) - 为本模块中的 cmdlet 的名词添加前缀(with
-Prefix
) - 从远程计算机导入模块(使用
-PSSession
参数)
该列表并不完全详尽,但这些是 Import-Module
cmdlet 的主要用例。
我知道已经有一个可接受的答案,但我想补充两分钱。
- 明确记录脚本对模块的依赖性
- 如果 $PSModuleAutoloadingPreference 设置为 "none",则需要显式加载模块。您不知道用户是否关闭了此功能。