Может ли Powershell «использовать» оператор с динамическими путями модуля? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть несколько модулей PowerShell, которые содержат классы, которые мне нужны для создания экземпляров из различных сценариев PowerShell.Чтобы получить доступ к классам из сценариев powershell, у меня есть такие выражения:

  using module "..\..\Library\Mymodule.psm1"

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

Мы не хотим использовать стандартные папки модулей powershell, потому что эти классы находятся под контролем исходного кода, и развертывание в пользовательских папках будет кошмарным.

Это чрезвычайно сложная тема для Google, потому что «использование» используется везде!

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

Указанный модуль 'C: ... Mymodule.psm1'не был загружен, потому что ни в одном каталоге модулей не было найдено допустимого файла модуля.В строке: 0 char: 0

using module "..\..\Library\Mymodule.psm1"
using module "..\Library\Mymodule.psm1"
using module ".\Library\Mymodule.psm1"

Но я бы предпочел запустить функцию, чтобы сначала определить правильный путь к модулю, а затем использовать что-то вроде этого

using module "$foundModulePath"

Есть лиспособ динамически установить путь к модулю и затем «использовать» его?

1 Ответ

0 голосов
/ 26 сентября 2019

Я бы поместил свои модули в отдельный репозиторий и написал бы функцию клонов, которые хранятся в рабочей области во время выполнения.

Использование тегов в этом репо - позволило бы мне контролировать версию модулей, которые я загружаю для каждого скрипта.Это сделает возможной разработку модулей, даже если сценарий все еще должен использовать старые версии, и я не хочу тратить время на его переписывание только потому, что изменил зависимость.

идея № 2 .Gradle очень хорошо справляется со сложными списками зависимостей в больших проектах.
Вы можете создать сценарий gradle, который подготавливает рабочее пространство, а затем из него выполнить свой сценарий powershell. См. Ссылку здесь

...