Любой динамический способ использования оператора using в PowerShell?

У меня проблемы с оператором using, который можно увидеть здесь. Этот оператор (в отличие от Import-Module) требуется для получения фактического определения класса из модуля PowerShell. У меня есть вариант использования для этого, потому что мне нужно само определение класса для модульного тестирования Pester.

Проблема в том, что я не могу найти способ динамически указать путь к модулю. Я не могу использовать в пути такие переменные, как $PSScriptPath. Я могу указать только абсолютный или относительный путь. Ни то, ни другое не работает для меня.

  • Абсолютный путь. Проблема в том, что модульные тесты будут запускаться на разных машинах (серверах сборки). Следовательно, жестко запрограммированный абсолютный путь от машины разработчика не вариант.
  • Относительный путь:. Это также проблематично, поскольку модульные тесты запускаются из базового каталога, который затем рекурсивно запускает все тестовые файлы. Поэтому мне пришлось бы Set-Location перейти в определенные каталоги для каждого теста, чтобы относительные пути функционировали. Чтобы протестировать десятки модулей, придется справиться с большими накладными расходами, когда я смогу просто запустить все свои модульные тесты без этих хлопот.

Есть ли лучший способ справиться с этим? Общая структура каталогов такая ...

src
   project1
      someModule1
         someModule1.psm1
      someModule2
         someModule2.psm1
      someModule3
         someModule3.psm1
      tests
         someModule1.Tests.ps1
         someModule2.Tests.ps1
         someModule3.Tests.ps1

Из каталога src запустите Invoke-Pester -Script ., чтобы запустить все файлы модульного теста. Файлы «Тесты» должны иметь возможность импортировать классы из соответствующих модулей. Что еще хуже, я не получаю никаких ошибок, если оператор using не находит путь к модулю, если я не запустил оператор using в интерактивном режиме в консоли. Любые идеи?


person Birdman    schedule 17.03.2020    source источник


Ответы (1)


Правильно ли установлены модули в пути PSmodule?

Установлены ли модули. Если да, то путь к ним можно получить, запросив:

(Get-Module -Name someModulex -ListAvailable).ModuleBase
person Scepticalist    schedule 17.03.2020