How do I force powershell to reload a custom module?

PowershellPowershell 5.0Powershell Module

Powershell Problem Overview


I have created a module 'ActiveDirectory.psm1' which contains a class in powershellv5. I am importing that module in another file called 'test.ps1' and then calling a method from the class.

test.ps1 contains the following:

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

Set-StrictMode -version Latest;

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

It all works as expected BUT when I make a change to ActiveDirectory.psm1 & save the changes they aren't reflected immediately. i.e. if ActiveDirectory.psm1 contains:

write-verbose 'do something';

If I change that to

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

the output remains 'do something'

I'm guessing it has stored the module in memory and doesn't reload it therefore missing the changes I have made. What command do I need to run to load the most recent saved version of the module?

Powershell Solutions


Solution 1 - Powershell

As suggested by wOxxOm, you can try pass the -Force flag:

Import-Module ... -Force

Or if that does not work try to explicitly remove it and then reimport with:

Remove-Module

Solution 2 - Powershell

Try the following:

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

Solution 3 - Powershell

From what I've gathered. Import-Module does not import classes. You have to use the "using module " and it has to be in the first line of your script. On top of that problem, the classes appear to be "cached" in some esoteric way that precludes any uninstall-module or remove-module options. I've found I basically need to restart my powershell terminal to clear it.

If classes are not involved use import-module OR install-module. In both cases you can do a get-modules -all or get-installedmodule and then remove-module or uninstall-module. You want to make sure you look for all versions and pipe that to remove/uninstall to ensure you wipe everything out.

Solution 4 - Powershell

For anyone else coming across this issue, see https://github.com/PowerShell/PowerShell/issues/2505

It seems that there is a known long-standing bug regarding importing of modules that are anything above rudimentary level in complexity (for example, I have a module with a single class and class method that fails to update).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionS. MitchellView Question on Stackoverflow
Solution 1 - PowershellDAXaholicView Answer on Stackoverflow
Solution 2 - PowershellKhachornchit SongsaenView Answer on Stackoverflow
Solution 3 - PowershelldhbramblettView Answer on Stackoverflow
Solution 4 - PowershellMatthew HeimlichView Answer on Stackoverflow