在再次导入相同模块后,从模块导入的变量变为$ null

ian*_*ank 7 powershell powershell-2.0

我有一个简单的模块:varExp.psm1

$ var1 = 20

Export-ModuleMember -Variable var1

我将此模块导入PS会话:

PS> Import-Module.\ varExp.psm1

然后

PS> $ var1

20

但在我第二次导入它之后

PS> Import-Module.\ varExp.psm1

PS> $ var1

PS>

$ var1变为null ...

谁知道这里发生了什么?(PS2.0)

编辑:有解决方法:强制重新加载Import-Module .\varExp.psm1 -Force,并测试模块是否已加载之前:if(-not (Get-Module varExp)) { Import-Module .\varExp.psm1 }.但我希望在简单的情况下得到$ null值背后的原因.

man*_*lds 5

我不确切知道会发生什么,但是当你重新导入模块时,你必须使用-Force.

当你包括时,-verbose你可以看到两者之间的区别:

PS> import-module .\test -Verbose
VERBOSE: Importing variable 'var1'.
Run Code Online (Sandbox Code Playgroud)

用力:

PS> import-module .\test -Verbose -Force
VERBOSE: Removing the imported "var1" variable.
VERBOSE: Loading module from path 'C:\test\test.psm1'.
VERBOSE: Importing variable 'var1'.
Run Code Online (Sandbox Code Playgroud)

文档确实说了以下内容:

如果将具有相同名称和相同类型的成员导入会话,则Windows PowerShell将默认使用最后导入的成员. 替换变量和别名,并且无法访问原始文件.

我认为重新导入模块时无法访问originals are not accessible$var1方法.