如何强制 Powershell 重新加载自定义模块?

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

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';

输出仍然是“做某事”

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

57675 次浏览

根据 WOxxom的建议,您可以尝试传递 -Force标志:

Import-Module ... -Force

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

Remove-Module

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

似乎在导入复杂度超过基本水平的模块方面存在一个长期存在的 bug (例如,我有一个带有单个类和类方法的模块无法更新)。

试试以下方法:

Import-Module 'E:\xxx.ps1' -Force

据我所知。Import-Module 不导入类。您必须使用“ using 模块”,并且它必须位于脚本的第一行。除此之外,这些类似乎以某种深奥的方式被“缓存”,从而排除了任何卸载模块或移除模块选项。我发现我基本上需要重新启动我的 Powershell 终端来清除它。

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