Remove-Module意外删除模块

时间:2018-03-08 18:04:48

标签: powershell powershell-v2.0

我有一些看起来像这样的模块(这是一个更小问题的最小可重复的案例,所以请耐心等待):

module-a.psm1

function Write-A {
  Write-Host "A";
}

Export-ModuleMember Write-A;

module-b.psm1

Import-Module "./module-a";

function Write-B {
  Write-A;
  Write-Host "B";
}

Export-ModuleMember Write-B;

这些模块的使用方式如下(fail.ps1):

Import-Module "./module-a";
Import-Module "./module-b";

Write-A;
Write-B;

Remove-Module module-b;

Write-A;

我希望得到以下结果:

A
A
B
A

但是,我得到了这个输出:

A
A
B
The term 'Write-A' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is corre ct and try again.
At fail.ps1:9 char:8
+ Write-A <<<< ;
    + CategoryInfo          : ObjectNotFound: (Write-A:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

我可以引入一层间接module-c.psm1

Import-Module "./module-a";
Export-ModuleMember Write-A;

然后制作一个有效的例子(pass.ps1):

Import-Module "./module-c";
Import-Module "./module-b";

Write-A;
Write-B;

Remove-Module module-b;

Write-A;

我在ps1中唯一更改的内容是导入module-c而不是module-a。我得到了正确的输出:

A
A
B
A

我不理解的是,fail.ps1删除module-b(内部使用module-a), 甚至删除module-a虽然它是在会话的顶层导入的。通过引入一层间接,似乎正确地调用Remove-Module知道另一个模块仍在引用它。这几乎就好像它没有正确地“计算参考”模块。我读过removing a loaded module,但似乎没有解释这种行为。这是Remove-Module中的错误还是预期的行为?

0 个答案:

没有答案