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

S. *_*ell 32 powershell powershell-module powershell-5.0

我创建了一个模块'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);
Run Code Online (Sandbox Code Playgroud)

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

write-verbose 'do something';
Run Code Online (Sandbox Code Playgroud)

如果我改变它

write-verbose 'now the script does something else';
Run Code Online (Sandbox Code Playgroud)

输出仍然是"做某事"

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

DAX*_*lic 50

正如wOxxOm所建议的尝试Import-Module ... -Force或者如果不起作用,请尝试使用Remove-Module并重新导入它来显式删除它

我刚刚创建了答案,以便在解决后可以关闭问题 - 如果wOxxOm将创建答案,我将删除此答案.

  • 我不喜欢写简单的答案,这就是我刚评论的原因:-D (4认同)
  • 不过,Import-Module -Force 似乎对类没有任何影响。我无法判断“使用模块 MyModule -Force”。就像使用 C# 类执行 Add-Type 一样,它们似乎在整个会话中持续存在。我很想知道一种方法 (2认同)

小智 6

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

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


Kha*_*aen 5

导入模块 'E:\xxx.ps1' -Force