导入模块的奇怪行为

时间:2018-12-10 18:13:37

标签: powershell

我在PowerShell中有一个非常奇怪的行为。

我使用以下脚本:

HelloWorld.psm1

function Write-HelloWorld {
    "Hello world"
}
Export-ModuleMember -Function Write-HelloWorld

test2.psm1

Import-Module .\HelloWorld.psm1 -Force

test1.ps1

Import-Module .\HelloWorld.psm1 -Force

"Is HelloWorld loaded: " + ($null -eq (Get-Module HelloWorld))

Import-Module .\test2.psm1 -Force

"Is HelloWorld loaded: " + ($null -eq (Get-Module HelloWorld))

当我运行test1.ps1时,结果是:

Is HelloWorld loaded: False
Is HelloWorld loaded: True

导入test2.psm1时将卸载HelloWorld模块。在我看来,这似乎不合逻辑...我知道HelloWorld模块的作用域在test2.psm1中是本地的,但是我希望他最后不会卸载它,因为它以前已经被导入了。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

来自import-module msdn。

“此参数[-force]使模块在当前模块的顶部加载或重新加载。”

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/import-module?view=powershell-6

我猜测是因为HelloWorld在您的test2中,所以它被强加在当前的HelloWorld模块上,并且由于其范围在test2内,因此它表明它确实存在于当前模块中。