about_PSModulePath
Descrição breve
Este artigo descreve a finalidade e o $env:PSModulePath
uso da variável de ambiente.
Descrição longa
A $env:PSModulePath
variável de ambiente contém uma lista de locais de pasta que são pesquisados para localizar módulos e recursos. O PowerShell pesquisa recursivamente arquivos de módulo (.psd1
ou .psm1
) em cada pasta.
Install-Module
tem um parâmetro Scope que permite especificar se o módulo está instalado para o usuário atual ou para todos os usuários. Para obter mais informações, confira Install-Module.
Por padrão, os locais efetivos atribuídos são $env:PSModulePath
:
Locais em todo o sistema: essas pastas contêm módulos fornecidos com o PowerShell. Esses módulos são armazenados na
$PSHOME\Modules
pasta. Este também é o local onde os módulos de gerenciamento do Windows estão instalados.Os módulos instalados no escopo AllUsers são armazenados no
$env:ProgramFiles\WindowsPowerShell\Modules
.Módulos instalados pelo usuário: são módulos instalados no escopo CurrentUser . O local do escopo CurrentUser normalmente é a
$HOME\Documents\WindowsPowerShell\Modules
pasta. O local específico da pasta varia de acordo com a versão do Windows e quando você usa oDocuments
redirecionamento de pasta. Além disso, o Microsoft OneDrive pode alterar o local da suaDocuments
pasta. Você pode verificar o local da pastaDocuments
usando o seguinte comando:[Environment]::GetFolderPath('MyDocuments')
.Módulos específicos do aplicativo: Os programas de instalação podem instalar módulos em outros diretórios, como o
Program Files
diretório. O instalador pode acrescentar o local do aplicativo ao valor de$env:PSModulePath
.
Construção do PowerShell PSModulePath
O valor de $env:PSModulePath
é construído sempre que o PowerShell é iniciado.
O valor varia de acordo com a versão do PowerShell e como ele é iniciado.
Inicialização do Windows PowerShell
O Windows PowerShell usa a seguinte lógica para construir o PSModulePath
na inicialização:
- Se
PSModulePath
não existir, combine CurrentUser, AllUsers e os caminhos dos$PSHOME
módulos - Se
PSModulePath
existir:- Se
PSModulePath
contiver$PSHOME
o caminho dos módulos:- O caminho dos módulos AllUsers é inserido antes
$PSHOME
do caminho dos módulos
- O caminho dos módulos AllUsers é inserido antes
- mais:
- Basta usar
PSModulePath
conforme definido, já que o usuário removeu deliberadamente o$PSHOME
local
- Basta usar
- Se
O caminho do módulo CurrentUser será prefixado somente se o escopo $env:PSModulePath
User não existir. Caso contrário, o escopo $env:PSModulePath
do usuário será usado conforme definido.
Comportamento de pesquisa do módulo
O PowerShell pesquisa recursivamente cada pasta no PSModulePath em busca de arquivos de módulo (.psd1
ou .psm1
). Esse padrão de pesquisa permite que várias versões do mesmo módulo sejam instaladas em pastas diferentes. Por exemplo:
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
Por padrão, o PowerShell carrega o número de versão mais alto de um módulo quando várias versões são encontradas. Para carregar uma versão específica, use Import-Module
com o parâmetro FullyQualifiedName . Para obter mais informações, consulte Import-Module.
Modificando PSModulePath
Para a maioria das situações, você deve instalar módulos nos locais de módulo padrão. No entanto, talvez seja necessário alterar o PSModulePath
valor da variável de ambiente.
Por exemplo, para adicionar temporariamente o C:\Program Files\Fabrikam\Modules
diretório à $env:PSModulePath
sessão atual, digite:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
Para alterar o valor de em cada sessão, edite a chave do PSModulePath
Registro que armazena os PSModulePath
valores. Os PSModulePath
valores são armazenados no registro como cadeias de caracteres não expandidas . Para evitar salvar permanentemente os PSModulePath
valores como cadeias de caracteres expandidas , use o método GetValue na subchave e edite o valor diretamente.
O exemplo a seguir adiciona o C:\Program Files\Fabrikam\Modules
caminho ao valor da variável de ambiente sem expandir as cadeias de PSModulePath
caracteres não expandidas.
$key = (Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
Para adicionar um caminho à configuração do usuário, altere o provedor do Registro de HKLM:\
para HKCU:\
.
$key = (Get-Item 'HKCU:\').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)