73

我创建了一个模块“ActiveDirectory.psm1”,其中包含 powershellv5 中的一个类。我将该模块导入另一个名为“test.ps1”的文件中,然后从该类中调用一个方法。

test.ps1 包含以下内容:

using module '\\ser01\Shared\Scripts\Windows Powershell\modules\ActiveDirectory\ActiveDirectory.psm1'

Set-StrictMode -version Latest;

$AD = [ActiveDirectory]::New('CS');
$AD.SyncGroupMembership($True);

这一切都按预期工作,但是当我对 ActiveDirectory.psm1 进行更改并保存它们不会立即反映的更改时。即如果 ActiveDirectory.psm1 包含:

write-verbose 'do something';

如果我将其更改为

write-verbose 'now the script does something else';

输出仍然是“做某事”

我猜它已经将模块存储在内存中并且没有重新加载它因此错过了我所做的更改。我需要运行什么命令来加载模块的最新保存版本?

4

4 回答 4

92

正如wOxxOm所建议的,您可以尝试传递-Force标志:

Import-Module ... -Force

或者,如果这不起作用,请尝试显式删除它,然后使用以下命令重新导入:

Remove-Module
于 2016-09-11T05:38:06.560 回答
7

尝试以下操作:

Import-Module 'E:\xxx.ps1' -Force
于 2018-09-23T17:43:41.880 回答
4

从我收集到的。Import-Module 不导入类。您必须使用“使用模块”,并且它必须位于脚本的第一行。最重要的是,这些类似乎以某种深奥的方式“缓存”,排除了任何卸载模块或删除模块选项。我发现我基本上需要重新启动我的 powershell 终端来清除它。

如果不涉及类,请使用 import-module 或 install-module。在这两种情况下,您都可以执行 get-modules -all 或 get-installedmodule,然后删除模块或卸载模块。您要确保查找所有版本并通过管道删除/卸载以确保清除所有内容。

于 2020-02-20T14:19:59.950 回答
3

对于遇到此问题的其他任何人,请参阅https://github.com/PowerShell/PowerShell/issues/2505

似乎存在一个已知的长期存在的错误,即导入复杂性高于基本级别的模块(例如,我有一个具有单个类和无法更新的类方法的模块)。

于 2018-04-19T22:36:36.467 回答