Как заставить powershell перезагрузить пользовательский модуль?

Я создал модуль 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';

вывод остается «сделать что-нибудь»

Я предполагаю, что он сохранил модуль в памяти и не перезагружает его, поэтому пропустил внесенные мной изменения. Какую команду мне нужно выполнить, чтобы загрузить самую последнюю сохраненную версию модуля?


person S. Mitchell    schedule 10.09.2016    source источник
comment
Import-Module ActiveDirectory -force может быть? См. раздел Powershell: редактирование уже импортированного модуля.   -  person wOxxOm    schedule 10.09.2016
comment
Я создал эту проблему, чтобы решить проблему, когда оператор using module не перезагружает модуль после того, как в него были внесены изменения. Пожалуйста, поднимите палец вверх, чтобы проголосовать за него. github.com/PowerShell/PowerShell/issues/7654   -  person deadlydog    schedule 29.08.2018
comment
Возможный дубликат Редактирование уже импортированного модуля   -  person Micha Wiedenmann    schedule 15.11.2018


Ответы (4)


Как было предложено wOxxOm, попробуйте Import-Module ... -Force или, если это не сработает, попробуйте явно удалить его с помощью Remove-Module и повторно импортировать.

Я только что создал ответ, чтобы вопрос можно было закрыть, если он будет решен - если wOxxOm создаст ответ, я удалите это.

person DAXaholic    schedule 11.09.2016
comment
Я не люблю писать простые ответы, поэтому просто прокомментировал :-D - person wOxxOm; 12.09.2016
comment
Import-Module -Force, похоже, не влияет на классы. Я не могу сказать, что можно использовать модуль MyModule -Force. Как и в случае с Add-Type с классом C#, они сохраняются в течение всего сеанса. Я хотел бы знать, как обойти это - person Dave_J; 12.03.2018
comment
Я создал эту проблему, чтобы решить проблему, когда оператор using module не перезагружает модуль после того, как в него были внесены изменения. Пожалуйста, поднимите палец вверх, чтобы проголосовать за него. github.com/PowerShell/PowerShell/issues/7654 - person deadlydog; 29.08.2018
comment
Да!! Я закрывал всю свою сессию powershell, как манекен - person Kellen Stuart; 11.11.2020

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

person Khachornchit Songsaen    schedule 23.09.2018

Для всех, кто сталкивается с этой проблемой, см. https://github.com/PowerShell/PowerShell/issues/2505

Похоже, что существует известная давняя ошибка, связанная с импортом модулей, которые по сложности превышают рудиментарный уровень (например, у меня есть модуль с одним классом и методом класса, который не обновляется).

person Matthew Heimlich    schedule 19.04.2018

Из того, что я собрал. Import-Module не импортирует классы. Вы должны использовать «использующий модуль», и он должен быть в первой строке вашего скрипта. Вдобавок к этой проблеме классы кажутся «кэшированными» каким-то эзотерическим способом, который исключает любые варианты удаления модуля или удаления модуля. Я обнаружил, что мне в основном нужно перезапустить терминал powershell, чтобы очистить его.

Если классы не задействованы, используйте модуль импорта ИЛИ модуль установки. В обоих случаях вы можете выполнить команду get-modules -all или get-installedmodule, а затем удалить модуль или удалить модуль. Вы хотите убедиться, что вы ищете все версии и передаете их для удаления / удаления, чтобы гарантировать, что вы все уничтожите.

person dhbramblett    schedule 20.02.2020
comment
К сожалению, у меня такая же проблема. У меня есть модуль с классом, но он не перезагружается с помощью Remove-Module, Import-Module. Мне нужно перезапустить сеанс PowerShell, чтобы получить обновления и т. д. Вероятно, такая же проблема, как упоминалось matthew-heimlich - person Maximojo; 20.07.2021