Как составляется свойство среды PSModulePath? - PullRequest
3 голосов
/ 04 июля 2019

Этот вопрос связан с другим моим постом - Использование как настольного компьютера Powershell 5.1, так и Powershell Core 6.1

По сути, корень зла в том, что когда я открываю настольную PowerShell и проверяю $env:PSModulePath, я вижу там путь к модулю PS.Core.

Пожалуйста, соблюдайте:

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\me> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.17763.503
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.503
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


PS C:\Users\me> $env:PSModulePath -split ';'
C:\Users\me\Documents\PowerShell\Modules
C:\Program Files\PowerShell\Modules
c:\program files\powershell\6\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
PS C:\Users\me>

Уведомление c:\program files\powershell\6\Modules.

Теперь, когда я проверяю переменные окружения на панели управления, я вижу другую картинку:

Пользователь

enter image description here

System

enter image description here

У меня даже нет сценария $PROFILE:

PS C:\Users\me> Test-Path $PROFILE
False
PS C:\Users\me>

Как можно видеть, путь к модулю PS.Core 6.1 не упоминается на панели управления, но он находится в фактической переменной среды PSModulePath.

Итак, мой вопрос - как действительно составлен PSModulePath?

Я не смог найти его в документации Microsoft (я имею в виду, что я обнаружил, что это переменная окружения, но, как видно, это еще не все). Должно быть, я упускаю что-то очевидное.

РЕДАКТИРОВАТЬ 1

Я открыл Process Explorer и проверил среду родительского процесса - explorer.exe. Его PSModulePath:

C:\Users\mkharitonov\Documents\PowerShell\Modules
C:\Program Files\PowerShell\Modules
c:\program files\powershell\6\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules

Но после уничтожения explorer.exe и повторного запуска я вижу, что путь к модулю PS.Core исчез. И поэтому повторное открытие Powershell показывает правильный путь к модулю.

Полагаю, когда я установил PS.Core 6.1, это каким-то образом изменило среду explorer.exe. Или это был VS Code? В любом случае перезапуск проводника устраняет проблему.

Мне придется копаться в нем и открывать ошибку в PS.Core или VS Code.

1 Ответ

2 голосов
/ 04 июля 2019

Когда PowerShell запускается, он пытается установить PSModulePath env var :

  1. Чтение существующего значения %PSModulePath% из хост-процесса
  2. Чтение путей модулей по умолчанию для текущего пользователя и для всех пользователей из конфигурации хост-приложения
  3. Если в Windows, тоже читать папку модуля %windir%\system32
  4. Обновите значение $env:PSModulePath, объединив все три

Если вы видите неожиданное значение, pwsh.exe могло бы просто унаследовать его от родительского процесса и включить в шаг 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...