powershell如何处理传递/嵌套模块导入?

时间:2017-05-23 11:23:01

标签: powershell module

我一直认为在我当前的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

检查时,这将使mod 2 .psm1的功能通过 mod1可用
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"正确"?

0 个答案:

没有答案