К обсуждениям

PowerShell не находит using module в папке с [ ]: матрица пути без переноса проекта

Редакция VOne Технологии

Как проверить ModuleNotFoundDuringParse, если скрипт находится в каталоге с символами wildcard: сравнить нейтральную копию в обычном и bracket-пути, не переименовывая рабочий проект и не меняя PSModulePath.

Подтвердите, что ошибка возникает при разборе

Сохраните точный ErrorId ModuleNotFoundDuringParse, строку using module и полный путь только локально. Конструкция using module обрабатывается при разборе скрипта, поэтому последующие команды Set-Location или Import-Module не являются тем же этапом. Запишите версию PowerShell и укажите, содержит ли имя любой родительской папки символы *, ?, [ или ]. Не публикуйте настоящее имя проекта и профиль пользователя; замените сегменты нейтральными. Если ошибка появляется уже после начала выполнения, это другой сценарий и его нельзя объединять с parse-time поиском модуля.

Соберите две одинаковые минимальные копии

Создайте во временном пользовательском каталоге две папки с одинаковыми простыми файлами: одна с обычным именем, другая с квадратными скобками. В каждой главный скрипт должен ссылаться на соседний psm1 относительным using module; содержимое модуля сократите до одной нейтральной функции или класса. Не переносите рабочий проект, не меняйте PSModulePath и не устанавливайте модуль глобально. Запустите обе копии тем же executable и из одной начальной директории. Различие результатов связывает симптом с формой пути в минимальном примере, сохраняя исходный проект нетронутым.

Сопоставьте using module и wildcard-правила

Microsoft Learn указывает, что путь в using module может быть полным или относительным, причём относительный путь разрешается относительно скрипта. Отдельная справка PowerShell объясняет, что квадратные скобки являются wildcard-символами, а для буквального доступа к таким именам нужны специальные способы обработки. Эти два факта задают границу эксперимента, но не доказывают, что parser использовал неправильный API. Не заменяйте using module на run-time Import-Module и не выдавайте успешный обход за исправление: конструкции предоставляют разные гарантии для типов и classes.

Подготовьте отчёт и безопасный временный путь

В issue передайте дерево из двух папок, версии PowerShell и ОС, одну строку относительного using module и точные результаты нормального и bracket-пути. Удалите профили, сетевые диски, корпоративные модули и signing-информацию. Если временно нужно продолжить работу, используйте согласованный путь без wildcard-символов только для копии или сборочного артефакта; не переименовывайте репозиторий, если на него ссылаются задачи, IDE или CI. Критерий остановки — совет менять глобальный PSModulePath или ExecutionPolicy: они не нужны для проверки формы родительского каталога.

Материал подготовлен редакцией VOne с применением ИИ для literal-path матрицы; семантика using module и wildcard проверена по Microsoft Learn, issue не принят за диагноз parser.

Источники и проверка

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

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.