我一直认为在我当前的PowerShell控制台中执行Import-Module
会使模块在整个控制台中可用。
最近我了解到,当从模块中执行Import-Module
时,事情变得复杂了。
比较
Windows PowerShell Session State
...
模块会话状态
只要将模块或其中一个嵌套模块导入会话,就会创建模块会话状态。当模块导出诸如cmdlet,函数或脚本之类的元素时,对该元素的引用将添加到会话的全局会话状态。但是,当元素运行时,它将在模块的会话状态内执行。
我能观察到的是:
# This is mod1.psm1
Import-Module -Force mod2.psm1
# end mod1.psm1
-
PS> Import-Module -Force mod1.psm1
...当使用Get-Module
PS> Import-Module -Force mod2.psm1
...这将通过mod2提供mod2的功能。
我甚至不完全理解这里的行为,但现在是有趣的部分:
# This is mod1.psm1
function fn_load_in_mod1 {
Import-Module -Force mod2.psm1
# mod2 stuff can be used here
}
# end mod1.psm1
PS> Import-Module -Force mod1.psm1
PS> # But here, no mod2 stuff is available anymore!
我了解到要将mod2内容提供给我的控制台,我需要:
# This is mod1.psm1
function fn_load_in_mod1 {
Import-Module -Force mod2.psm1 -Global
# mod2 stuff can be used here, and with the -Global switch also "outside"
}
# end mod1.psm1
但是,我无法做出会议状态的头脑或尾巴。
我应该如何在
模块中正确地执行Import-Module
"正确"?