Я думаю, как вы запустили это, вы сделали вызов .\moduletest.ps1
, и вы описываете результат, полученный при запуске функции Test
в module.psm1
, а затем результат, полученный из строк кода внутри moduletest.ps1
сама потом. Это было бы более полезно в описании вашего вопроса, чтобы воспроизвести проблему. Сначала я не был уверен, что вы говорите, что запускаете строки из файлов по отдельности в ISA или строки в командном окне или в обоих, и какие из них.
Если вы удаляете оснастку в контексте скрипта, вам, очевидно, нужно добавить ее обратно в тот же скрипт, если вы хотите использовать ее снова в этом скрипте или сеансе - она действительно будет удалена. Если вы выполняете некоторые команды в командной строке, они будут выполняться в том же контексте / сеансе, что и сценарий, вызываемый до его запуска. Пример. если бы у вас была строка $myVariable = "Sushi"
внутри файла с именем mycode.ps1
, и вы сделали .\mycode.ps1
в командной строке, а затем вы сделали Write-Host $myVariable
в командной строке сразу после этого, это вывело бы Sushi
.
Когда вы запускаете строки сценария ps1, у него есть возможность удалить оснастку, и, очевидно, он делает это быстро. Когда вы пытаетесь удалить оснастку из функции в модуле (как в module.psm1
), это, по-видимому, все еще происходит, но происходит слишком медленно, чтобы его можно было добавить повторно (повторное добавление не выполняется, потому что оно думает, что это все еще там), потому что вы говорите, что когда вы запускаете команды на основе оснастки после удаления / перезагрузки, они терпят неудачу. Я думаю, что модуль действительно удаляет оснастку, но просто не сообщает вашему скрипту, что он удаляется при проверке, чтобы иметь возможность повторно добавить его. Если вы добавите задержку во время функции Test
модуля между удалением и когда он попытается выполнить повторное добавление, вероятно, 100-200 мс, он, вероятно, преуспеет при повторном добавлении, просто отлично:
Start-Sleep -m 200
Как правило, вам даже не нужно вообще удалять оснастку - она будет удалена сама по себе, когда сессия (окно) закрыта / скрипт завершен. Если вы загружаете оснастку, которая уже загружена, это тоже не имеет значения - вы сможете сохранять команды загрузки.