Дублирование развертывания модуля PowerShell - PullRequest
2 голосов
/ 04 ноября 2019

Я использую Azure DevOps для развертывания модулей PowerShell на сервере. Эта задача выпуска развертывает модули в каталог C:\Windows\System32\WindowsPowerShell\v1.0\Modules\. Я могу использовать модули после того, как они успешно развернуты в этой папке.

Если я изменю один из модулей и перезапущу его, файл в C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ будет обновлен, однако старая версия модулявсе еще используется при запуске из командного файла с использованием pwsh.

Я обнаружил, что файл модуля также существует по следующим путям:

  • C: \ Program Files \ PowerShell \ Modules \
  • C: \ Program Files \PowerShell \ 6 \ Modules \

При развертывании новой версии с помощью DevOps Azure старая версия в двух вышеуказанных каталогах обновляется , а не . Обновление модуля в этих местах вручную устраняет проблему.

Почему файл модуля копируется в эти два дополнительных пути? Должны ли эти копии быть перезаписаны при развертывании новой версии модуля? Как правильно развернуть модуль в этом сценарии?

1 Ответ

1 голос
/ 11 ноября 2019

Powershell использует разные пути для загрузки модулей. Используйте $env:PSModulePath -split ";", чтобы узнать, какие пути используются. Разница между каждым путем заключается в области действия пользователя и области использования (например, для пользовательских модулей или официальных модулей Windows).

Теперь по умолчанию PS ищет последнюю версию каждого модуля по всем путям. . Так что, может быть, старая версия запускается, потому что во время повторного развертывания. Вы не обновляете версию модуля в Манифесте модуля, поэтому, если PS увидит, что они являются «той же самой» версией, он загрузит последнюю из них в PSModulePath.

Посмотрите этот удивительный пост для более подробной информации: Все, что вы хотели знать о пути модуля PowerShell

Теперь к вашим вопросам.

  • Почему файл модуля копируется в эти два дополнительных пути?

    Это может быть конфигурация сервера или сценарий, который вы используете для развертывания.

  • Должны ли эти копии быть перезаписаны при развертывании новой версии модуля?

    Не обязательно, если версии поддерживаются правильно. На посте поделился сказано, как проверить версии каждого модуля.

...