Хотя рекомендуется явно загружать нужные модули с помощью Import-Module
, поскольку Powershell 3.0, если модуль доступен в одном из мест, возвращаемых $env:PSModulePath
, автоматически загружается, если один из его Командлеты вызываются. Ниже приводится разбивка различных путей:
Модули пользователя
$modulePath = "${env:UserProfile}\Documents\WindowsPowerShell\Modules"
Установленные здесь модули доступны только для сеанса Powershell текущего пользователя, и по умолчанию модули, установленные с использованием Install-Module
, сохраняются здесь.
Все пользовательские модули
$modulePath = "${env:ProgramFiles}\WindowsPowerShell\Modules"
Установленные здесь модули доступны для любого пользовательского сеанса Powershell.
Системные модули
$modulePath = "${env:SystemRoot}\system32\WindowsPowerShell\v1.0\Modules"
Установленные здесь модули доступны для всей системы для любого сеанса Powershell, но должны быть чистыми для управления Windows. Как правило, вы не хотите устанавливать свои собственные модули здесь.
Добавление дополнительных путей к модулям
Вы можете добавить дополнительные пути к $env:PSModulePath
аналогично тому, как вы изменили бы переменную $env:PATH
для разрешения исполняемых путей. Это просто строка каталогов, разделенная точкой с запятой ;
, в которой находятся модули, и если модуль доступен по любому пути в $env:PSModulePath
, Powershell будет знать, где его найти. И на самом деле вы можете видеть, что другие установленные инструменты, возможно, добавили свои собственные пути к $env:PSModulePath
. Вот несколько примеров программ / наборов инструментов, которые делают это: Microsoft SQL Studio
, Microsoft System Center - Operations Manager
и Chef Development Kit
.
Импорт модуля не по пути
Насколько я знаю, вы не можете загрузить модуль Powershell, который не является частью $env:PSModulePath
. Однако вы можете временно отредактировать $env:PSModulePath
, чтобы он содержал каталог с модулем, который вы хотите загрузить. Например, если вы хотите импортировать модуль с именем TestModule
по произвольному пути:
$env:PSModulePath += ';C:\Path\To\Temporary\ModuleDirectory'
Import-Module TestModule
, где TestModule
существует как прямая подпапка C:\Path\To\Temporary\ModuleDirectory
Вам не нужно отменять изменение пути модуля, когда вы готовы завершить сеанс Powershell, поскольку указанное выше изменение является временным. Следовательно, вам нужно будет модифицировать $env:PSModulePath
в каждом сеансе, поэтому, если вы хотите, чтобы TestModule
был постоянно доступным для использования, вы можете скопировать его в один из других каталогов в $env:PSModulePath
или добавить постоянно C:\Path\To\Temporary\ModuleDirectory
в переменную окружения PSModulePath
.
Примечание о путях UNC
Вы также можете добавить UNC (сетевые) пути к $env:PSModulePath
. Тем не менее, я полагаю, что любые сценарии удаленного модуля все еще будут зависеть от установленного в системе Powershell ExecutionPolicy
.