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

PSModulePath меняется у дочернего PowerShell: матрица наследования A→B→C

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

Как проверить различия PSModulePath при прямом и промежуточном запуске PowerShell 7 и Windows PowerShell 5.1: снимки среды A→B→C без правки системных переменных.

Почему нужны две цепочки запуска

Microsoft объясняет, что переменные среды существуют в областях Machine, User и Process, а дочерний процесс наследует среду родительского процесса. Отдельная документация PSModulePath описывает, как PowerShell формирует путь поиска модулей при запуске и как поведение различается между Windows PowerShell и PowerShell 7. Поэтому одного снимка конечной оболочки недостаточно. Обозначьте A как исходный процесс, B как PowerShell 7, C как Windows PowerShell 5.1. Контрольная цепочка A→C сравнивается с A→B→C. Не запускайте тест из рабочей IDE или агента автоматизации: они могут добавлять собственные переменные и скрыть исходную границу.

Матрица A→C и A→B→C

Для каждой точки запишите версию оболочки, разрядность, область запуска и PSModulePath как упорядоченный список элементов. Не сохраняйте домашние каталоги дословно: замените пользовательскую часть пути нейтральной меткой, сохранив порядок и системные сегменты. Сначала выполните прямую цепочку A→C, затем из того же A запустите B и из него C. Если различие появляется уже в B, конечный C наследует иной процессный контекст. Если B совпадает с A, а меняется только C, граница относится к запуску Windows PowerShell. Не делайте вывод о несовместимости модуля только по пути: матрица показывает происхождение среды, а не успешность импорта конкретной версии.

Безопасный контроль без правки системы

Повторите обе цепочки в новой обычной сессии пользователя и меняйте только промежуточную оболочку. Не редактируйте Machine или User PSModulePath, не копируйте модули между каталогами и не переустанавливайте PowerShell: такие действия могут временно скрыть расхождение и затронуть другие приложения. Если нужен дополнительный контроль, задайте нейтральную процессную переменную только внутри одной тестовой сессии и закройте её после сравнения. Критерий остановки — любое действие с постоянной системной средой или производственным модулем. Если ошибка команды зависит от того, какая версия модуля выбрана, фиксируйте имя и версию, но не публикуйте внутренние пути и корпоративные имена.

Что передать рабочей группе

Приложите две короткие цепочки запуска, версии A, B и C, обезличенные списки PSModulePath и точку первого расхождения. Укажите, воспроизводится ли поведение в новой пользовательской сессии и присутствует ли тот же модуль в нескольких сегментах пути. Не включайте полный снимок среды: в нём могут быть токены, адреса сервисов и другие секреты. Свежий issue содержит похожее сравнение, но не заменяет официальные правила наследования и не доказывает единый дефект. Хороший критерий эскалации — стабильное различие между A→C и A→B→C при одинаковом пользователе, версии C и отсутствии пользовательских скриптов профиля.

Материал подготовлен редакцией VOne с применением ИИ для матрицы A→B→C; правила среды вручную проверены по Microsoft Learn, а issue отделён от доказательств.

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

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

Ответы

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

Ваш ответ

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

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

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