У меня есть следующая структура каталогов:
└─ScriptModuleRepositoryTemplate
│ ScriptModuleRepositoryTemplate.psd1
│ ScriptModuleRepositoryTemplate.psm1
│ ScriptModuleRepositoryTemplate.Tests.ps1
В верхней части файла Pester ScriptModuleRepositoryTemplate.Tests.ps1
у меня есть оператор для импорта модуля:
using module './ScriptModuleRepositoryTemplate.psm1'
Модуль импортирован, и тесты Pester работают нормально в Pwsh 7, но в Windows PowerShell 5.1 выдается ошибка:
System.IO.FileNotFoundException: The specified module 'D:\a\PowerShell.ScriptModuleRepositoryTemplate\PowerShell.ScriptModuleRepositoryTemplate\ScriptModuleRepositoryTemplate.psm1' was not loaded because no valid module file was found in any module directory.
Если вместо этого я использую Import-Module
вот так:
Import-Module -Name "$PSScriptRoot/ScriptModuleRepositoryTemplate.psm1"
он работает как в PowerShell 5.1, так и в 7, но, конечно, Import-Module
не импортирует классы и перечисления, поэтому мне нужно использовать using module
.
И Pwsh, и Windows PowerShell используют Pester v5.5.0, поэтому я думаю, что проблема связана не с Pester, а с самой Windows PowerShell.
Я могу воспроизвести проблему на своем локальном компьютере, запустив Invoke-Pester .
, а также в GitHub Actions (см. запуск этого рабочего процесса в проекте с открытым исходным кодом).
Есть ли у кого-нибудь идеи, как мне заставить using module './PathToModuleFile.psm1'
работать правильно?
Угу, оказывается, проблема заключалась в использовании косой черты /
в пути к файлу модуля 🤦♂️. Кажется, косая черта отлично работает с Import-Module
в Windows PowerShell, но не с using module
.
Однажды я изменил:
using module './ScriptModuleRepositoryTemplate.psm1'
к:
using module '.\ScriptModuleRepositoryTemplate.psm1'
затем все работало нормально в Windows PowerShell 5.1 и Pwsh 7.