Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descrição curta
Este artigo descreve a finalidade e o uso da variável de $Env:PSModulePath ambiente.
Descrição longa
A $Env:PSModulePath variável de ambiente contém uma lista de locais de pastas. O PowerShell pesquisa recursivamente cada pasta em busca de arquivos de módulo (.psd1 ou .psm1).
Por padrão, os locais efetivos atribuídos são $Env:PSModulePath :
- Módulos instalados no escopo CurrentUser :
- No Windows, esses módulos são armazenados no
$HOME\Documents\PowerShell\Modules. O local específico da pasta varia de acordo com a versão do Windows e quando você usa oDocumentsredirecionamento de pasta. Além disso, o Microsoft OneDrive pode alterar o local da suaDocumentspasta. Para verificar o local da suaDocumentspasta, execute o seguinte comando:[Environment]::GetFolderPath('MyDocuments'). - Em sistemas não Windows, esses módulos são armazenados na
$HOME/.local/share/powershell/Modulespasta.
- No Windows, esses módulos são armazenados no
- Módulos instalados no escopo AllUsers :
- No Windows, esses módulos são armazenados no
$Env:ProgramFiles\PowerShell\Modules. - Em sistemas não Windows, esses módulos são armazenados no
/usr/local/share/powershell/Modules.
- No Windows, esses módulos são armazenados no
- Os módulos fornecidos com o PowerShell são armazenados no
$PSHOME\Modules.
Observação
Os aplicativos que incluem módulos do PowerShell podem instalar módulos em outros diretórios no Windows, como a Program Files pasta. O pacote do instalador pode não acrescentar o local ao $Env:PSModulePath.
Os locais padrão do Windows PowerShell 5.1 são diferentes do PowerShell 7.
- Os módulos instalados no escopo CurrentUser são armazenados no
$HOME\Documents\WindowsPowerShell\Modules. - Os módulos instalados no escopo AllUsers são armazenados no
$Env:ProgramFiles\WindowsPowerShell\Modules. - Módulos fornecidos com o Windows PowerShell armazenados no
$PSHOME\Modules, que é$Env:SystemRoot\System32\WindowsPowerShell\1.0\Moduleso .
Construção do PSModulePath do PowerShell
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 você o iniciou.
Inicialização do Windows PowerShell
O Windows PowerShell usa a seguinte lógica para construir o PSModulePath na inicialização:
- Se
PSModulePathnão existir, combine CurrentUser, AllUsers e os caminhos dos$PSHOMEmódulos - Se
PSModulePathexistir:- Se
PSModulePathcontiver$PSHOMEo caminho dos módulos:-
O caminho dos módulos AllUsers é inserido antes do
$PSHOMEcaminho dos módulos
-
O caminho dos módulos AllUsers é inserido antes do
- mais:
- Basta usar
PSModulePathconforme definido, pois o usuário removeu deliberadamente o$PSHOMElocal
- Basta usar
- Se
O caminho do módulo CurrentUser será prefixado somente se o escopo $Env:PSModulePath do usuário não existir. Caso contrário, o escopo $Env:PSModulePath do usuário será usado conforme definido.
Inicialização do PowerShell 7
No Windows, para a maioria das variáveis de ambiente, se a variável no escopo do usuário existir, um novo processo usará apenas esse valor, mesmo quando existir uma variável no escopo do computador com o mesmo nome. As variáveis de ambiente do caminho são tratadas de forma diferente.
No Windows, PSModulePath é tratado de forma semelhante à forma como a Path variável de ambiente é tratada.
Path é tratada de forma diferente de outras variáveis de ambiente. Quando um processo é iniciado, o Windows combina o escopo Path do usuário com o escopo Pathdo computador.
- Recupere o escopo do usuário
PSModulePath - Comparar com a variável de ambiente herdada
PSModulePathdo processo- Se o mesmo:
- Acrescente o AllUsers
PSModulePathao final seguindo a semânticaPATHda variável de ambiente - O caminho do Windows
System32vem do computador definidoPSModulePath, portanto, não precisa ser adicionado explicitamente
- Acrescente o AllUsers
- Se for diferente, trate como se o usuário o tivesse modificado explicitamente e não acrescente AllUsers
PSModulePath
- Se o mesmo:
- Prefixo com usuário PS7, sistema e
$PSHOMEcaminhos nessa ordem- Se
powershell.config.jsoncontiver um escopo dePSModulePathusuário , use-o em vez do padrão para o usuário - Se
powershell.config.jsoncontiver um escopo doPSModulePathsistema , use-o em vez do padrão para o sistema
- Se
Os sistemas não Windows não têm uma separação de variáveis de ambiente Usuário e Sistema.
PSModulePath é herdado e os caminhos específicos do PS7 são prefixados, se ainda não estiverem definidos.
Iniciando o Windows PowerShell do PowerShell 7
Para esta discussão, Windows PowerShell significa powershell.exe e powershell_ise.exe.
O valor de é copiado $Env:PSModulePath para com WinPSModulePath as seguintes modificações:
- Remova PS7 o caminho do módulo do usuário
- Remova PS7 o caminho do módulo do sistema
- Remova PS7 o caminho do
$PSHOMEmódulo
Os caminhos do PS7 são removidos para que os módulos do PS7 não sejam carregados no Windows PowerShell. O WinPSModulePath valor é usado ao iniciar o Windows PowerShell.
Iniciando o PowerShell 7 a partir do Windows PowerShell
A inicialização do PowerShell 7 continua no estado em que se encontra com a adição de caminhos herdados que o Windows PowerShell adicionou. Como os caminhos específicos do PS7 são prefixados, não há problema funcional.
Comportamento de pesquisa de 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 valor da variável de PSModulePath 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"
O ponto-e-vírgula (;) no comando separa o novo caminho do caminho que o precede na lista. Em plataformas não Windows, os dois-pontos (:) separam os locais do caminho na variável de ambiente.
Modificando PSModulePath em não Windows
Para alterar o valor de PSModulePath para cada sessão em um ambiente não Windows, adicione o comando anterior ao seu perfil do PowerShell.
Modificando PSModulePath no Windows
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 GetValue() método 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\Environment')
$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, use o seguinte código:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)