about_PSModulePath
Краткое описание
В этой статье описывается назначение и использование переменной $env:PSModulePath
среды.
Подробное описание
Переменная $env:PSModulePath
среды содержит список расположений папок. PowerShell рекурсивно ищет каждую папку для файлов модулей (.psd1
или .psm1
) .
По умолчанию назначены действующие расположения $env:PSModulePath
:
- Модули, установленные в области CurrentUser , хранятся в
$HOME\Documents\WindowsPowerShell\Modules
. - Модули, установленные в области AllUsers , хранятся в
$env:ProgramFiles\WindowsPowerShell\Modules
. - Модули, которые поставляются с Windows PowerShell, хранящиеся
$PSHOME\Modules
в$env:SystemRoot\System32\WindowsPowerShell\1.0\Modules
.
Построение PowerShell PSModulePath
Значение $env:PSModulePath
создается при каждом запуске PowerShell.
Значение зависит от версии PowerShell и способа ее запуска.
Запуск Windows PowerShell
Windows PowerShell использует следующую логику для создания PSModulePath
при запуске:
- Если
PSModulePath
не существует, объедините CurrentUser, AllUsers и$PSHOME
пути модулей - Если
PSModulePath
существует:- Если
PSModulePath
содержится путь к модулям$PSHOME
:-
Путь к модулям AllUsers вставляется перед
$PSHOME
путем модулей
-
Путь к модулям AllUsers вставляется перед
- еще:
- Просто используйте
PSModulePath
как определено, так как пользователь намеренно удалил$PSHOME
расположение
- Просто используйте
- Если
Путь модуля CurrentUser префиксируется только в том случае, если область $env:PSModulePath
пользователя не существует. В противном случае область $env:PSModulePath
пользователя используется в соответствии с определенными параметрами.
Поведение поиска модуля
PowerShell рекурсивно выполняет поиск каждой папки в файлах PSModulePath для модулей (.psd1
или .psm1
) . Этот шаблон поиска позволяет устанавливать несколько версий одного модуля в разных папках. Например:
Directory: C:\Program Files\WindowsPowerShell\Modules\PowerShellGet
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 8/14/2020 5:56 PM 1.0.0.1
d---- 9/13/2019 3:53 PM 2.1.2
По умолчанию PowerShell загружает наибольшее число версий модуля при обнаружении нескольких версий. Чтобы загрузить определенную версию, используйте Import-Module
параметр ПолностьюQualifiedName . Дополнительные сведения см. в разделе Import-Module.
Изменение PSModulePath
В большинстве случаев следует устанавливать модули в расположениях модулей по умолчанию. Однако может потребоваться изменить значение переменной PSModulePath
среды.
Например, чтобы временно добавить каталог C:\Program Files\Fabrikam\Modules
в текущий $env:PSModulePath
сеанс, введите:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
Чтобы изменить значение каждого сеанса PSModulePath
, измените раздел реестра, в котором хранятся PSModulePath
значения. Значения PSModulePath
хранятся в реестре как необъяснимые строки. Чтобы избежать постоянного сохранения PSModulePath
значений в виде развернутых строк, используйте GetValue()
метод в подразделе и измените значение напрямую.
В следующем примере путь к значению переменной C:\Program Files\Fabrikam\Modules
среды добавляется PSModulePath
без расширения необъясненных строк.
$key = (Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
Чтобы добавить путь к параметру пользователя, используйте следующий код:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
См. также
PowerShell