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
Descreve como acessar e gerenciar variáveis de ambiente no PowerShell.
Descrição longa
As variáveis de ambiente armazenam dados usados pelo sistema operacional e outros programas. O PowerShell cria as seguintes variáveis de ambiente:
POWERSHELL_TELEMETRY_OPTOUTPOWERSHELL_DISTRIBUTION_CHANNELPOWERSHELL_UPDATECHECKPOWERSHELL_DIAGNOSTICS_OPTOUTPSExecutionPolicyPreferencePSModulePathPSModuleAnalysisCachePathPSDisableModuleAnalysisCacheCleanup
Para obter descrições completas dessas variáveis, consulte as variáveis de ambiente do PowerShell deste artigo.
O PowerShell pode acessar e gerenciar variáveis de ambiente em qualquer uma das plataformas de sistema operacional com suporte. O provedor de Ambiente do PowerShell permite obter, adicionar, alterar, limpar e excluir variáveis de ambiente no console atual.
Nota
Ao contrário do Windows, os nomes de variáveis de ambiente no macOS e no Linux diferenciam maiúsculas de minúsculas. Por exemplo, $Env:Path e $Env:PATH são variáveis de ambiente diferentes em plataformas não Windows.
Variáveis de ambiente, ao contrário de outros tipos de variáveis no PowerShell, são sempre armazenadas como cadeias de caracteres. Além disso, ao contrário de outras variáveis, elas são herdadas por processos filho, como tarefas em segundo plano locais e sessões nas quais os membros do módulo são executados. Isso torna as variáveis de ambiente adequadas para armazenar valores necessários em processos pai e filho.
No Windows, as variáveis de ambiente podem ser definidas em três escopos:
- Escopo da máquina (ou sistema)
- Escopo do usuário
- Escopo do processo
O escopo do Processo contém as variáveis de ambiente disponíveis no processo atual ou na sessão do PowerShell. Essa lista de variáveis é herdada do processo pai e é construída a partir das variáveis nos escopos Machine e User.
Quando você altera variáveis de ambiente no PowerShell, a alteração afeta apenas a sessão atual. Esse comportamento se assemelha ao comportamento do comando set no Shell de Comando do Windows e ao comando setenv em ambientes baseados em Unix. Para alterar valores nos escopos do Computador ou do Usuário, você deve usar os métodos da classe System.Environment.
Para fazer alterações em variáveis com escopo de computador, você também deve ter permissão. Se você tentar alterar um valor sem permissão suficiente, o comando falhará e o PowerShell exibirá um erro.
O PowerShell fornece vários métodos diferentes para usar e gerenciar variáveis de ambiente.
- A sintaxe da variável
- O provedor de Ambiente e os cmdlets de Item
- A classe .NET System.Environment
Usar a sintaxe variável
Você pode exibir e alterar os valores das variáveis de ambiente com a seguinte sintaxe:
$Env:<variable-name>
Por exemplo, para exibir o valor da variável de ambiente windir:
$Env:windir
C:\Windows
Nessa sintaxe, o sinal de dólar ($) representa uma variável, e o nome da unidade (Env:) representa uma variável de ambiente seguida pelo nome da variável (windir).
Você pode criar e atualizar o valor das variáveis de ambiente com a seguinte sintaxe:
$Env:<variable-name> = "<new-value>"
Por exemplo, para criar a variável de ambiente Foo:
$Env:Foo = 'An example'
Como as variáveis de ambiente são sempre cadeias de caracteres, você pode usá-las como qualquer outra variável que contenha uma cadeia de caracteres. Por exemplo:
"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example
An example!
A partir do PowerShell 7.5, você pode definir uma variável de ambiente como uma cadeia de caracteres vazia. Definir uma variável de ambiente para $null removê-la da sessão atual. Por exemplo:
PS> $env:TEST = ''
PS> Get-ChildItem env:TEST
Name Value
---- -----
TEST
PS> $env:TEST = $null
PS> $env:TEST.Length
0
PS> Get-ChildItem env:TEST
Get-ChildItem: Cannot find path 'TEST' because it does not exist.
Para obter mais informações sobre variáveis no PowerShell, consulte about_Variables.
Use o provedor de Ambiente e os cmdlets de Item
O provedor Environment do PowerShell oferece uma interface para interagir com variáveis de ambiente em um formato semelhante a uma unidade do sistema de arquivos. Ele permite que você obtenha, adicione, altere, limpe e exclua variáveis de ambiente e valores no PowerShell.
Por exemplo, para criar a variável de ambiente Foo com um valor de Bar:
New-Item -Path Env:\Foo -Value 'Bar'
Name Value
---- -----
Foo Bar
Você também pode copiar a variável de ambiente com Copy-Item, definir o valor de uma variável de ambiente com Set-Item, listar variáveis de ambiente com Get-Iteme excluir a variável de ambiente com Remove-Item.
Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name Value
---- -----
Foo2 Bar
Name Value
---- -----
Foo2 BAR
Foo Bar
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".
Use o cmdlet Get-ChildItem para ver uma lista completa de variáveis de ambiente:
Get-ChildItem Env:
A partir do PowerShell 7.5, você pode definir uma variável de ambiente para uma cadeia de caracteres vazia usando o provedor de ambiente e Set-Item o cmdlet. Definir uma variável de ambiente para $null removê-la da sessão atual. Por exemplo:
PS> Set-Item env:TEST 'Foo'
PS> Get-ChildItem env:TEST
Name Value
---- -----
TEST Foo
PS> Set-Item env:TEST ''
PS> Get-ChildItem env:TEST
Name Value
---- -----
TEST
PS> Set-Item -Path env:TEST -Value $null
PS> Get-ChildItem env:TEST
Get-ChildItem: Cannot find path 'TEST' because it does not exist.
Para obter mais informações sobre como usar o provedor Environment para gerenciar variáveis de ambiente, consulte about_Environment_Provider.
Use os métodos System.Environment
A classe System.Environment fornece os métodos GetEnvironmentVariable() e SetEnvironmentVariable() para obter e modificar variáveis de ambiente.
O exemplo a seguir cria uma nova variável de ambiente, Foo, com um valor de Bar e retorna seu valor.
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
A partir do PowerShell 7.5, você pode definir uma variável de ambiente para uma cadeia de caracteres vazia usando o SetEnvironmentVariable() método e especificando uma cadeia de caracteres vazia ou $null para o valor da variável. Por exemplo:
PS> [Environment]::SetEnvironmentVariable('Foo','Bar')
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo Bar
PS> [Environment]::SetEnvironmentVariable('Foo','')
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo
PS> [Environment]::SetEnvironmentVariable('Foo','bar')
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo bar
PS> [Environment]::SetEnvironmentVariable('Foo',$null)
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo
Nota
Ao contrário da sintaxe variável e dos casos de provedor, atribuir o valor ao $null uso do SetEnvironmentVariable() método não remove a variável de ambiente.
Para obter mais informações sobre os métodos da classe System.Environment, consulte Environment Methods.
Criar variáveis de ambiente persistentes no Windows
No Windows, há três métodos para fazer uma alteração persistente em uma variável de ambiente:
- Defina-os em seu perfil
- Usando o método
SetEnvironmentVariable() - Usar o Painel de Controle do Sistema
Definir variáveis de ambiente em seu perfil
Qualquer variável de ambiente que você adicionar ou alterar em seu perfil do PowerShell está disponível em qualquer sessão que carregue seu perfil. Esse método funciona para qualquer versão do PowerShell em qualquer plataforma com suporte.
Por exemplo, para criar a variável de ambiente CompanyUri e atualizar a variável de ambiente PATH para incluir a pasta C:\Tools, adicione as seguintes linhas ao seu perfil do PowerShell:
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:PATH += ';C:\Tools'
Nota
No Linux ou macOS, os dois-pontos (:) são usados em vez de ponto e vírgula (;) para separar um novo caminho do caminho que o precede na lista.
Você pode obter o caminho para o seu perfil do PowerShell com a variável $PROFILE automática. Para obter mais informações sobre perfis, consulte about_Profiles.
Definir variáveis de ambiente com SetEnvironmentVariable()
No Windows, você pode especificar um escopo para o método SetEnvironmentVariable() como o terceiro parâmetro para definir a variável de ambiente nesse escopo. Os escopos do computador e do usuário persistem fora do processo atual, permitindo que você salve uma variável de ambiente nova ou alterada.
Por exemplo, para salvar uma nova variável de ambiente Foo com o valor Barno escopo do computador:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
Você pode excluir uma variável de ambiente do escopo do usuário ou do computador definindo o valor da variável como uma cadeia de caracteres vazia.
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
Definir variáveis de ambiente no Painel de Controle do Sistema
No Painel de Controle do Sistema, você pode adicionar ou editar variáveis de ambiente existentes nos escopos do User e System (Machine). O Windows grava esses valores no Registro para que eles persistam entre sessões e reinicializações do sistema.
Para fazer uma alteração persistente em uma variável de ambiente no Windows usando o Painel de Controle do Sistema:
- Abra o Painel de Controle do Sistema.
- Selecione Sistema.
- Selecione Configurações Avançadas do Sistema.
- Acesse a guia Avançado.
- Selecione Variáveis de ambiente....
- Faça suas alterações.
Criar variáveis de ambiente persistentes em plataformas que não são do Windows
Linux e macOS têm arquivos de configuração e scripts que o sistema operacional usa para definir variáveis de ambiente antes de iniciar um aplicativo.
Ao executar o PowerShell como o shell padrão (logon), você pode definir variáveis de ambiente nos arquivos de inicialização globais compatíveis com o sistema operacional. Por exemplo, no Linux, você pode adicionar variáveis de ambiente ao arquivo /etc/environment ou criar um script que define variáveis de ambiente e colocá-lo na pasta /etc/profile.d. No macOS, você pode adicionar variáveis de ambiente ao arquivo /etc/profile.
Ao iniciar o PowerShell a partir de outro shell, você pode definir variáveis de ambiente nos arquivos de inicialização específicos para shells que não são de logon, como ~/.bashrc para bash ou ~/.zshrc para zsh.
Para obter mais informações, consulte a documentação do sistema operacional e do shell padrão.
Variáveis de ambiente do PowerShell
Os recursos do PowerShell podem usar variáveis de ambiente para armazenar as preferências do usuário. Essas variáveis funcionam como variáveis de preferência, mas são herdadas por sessões filhas das sessões em que são criadas. Para obter mais informações sobre variáveis de preferência, consulte about_Preference_Variables.
As variáveis de ambiente que armazenam preferências incluem:
POWERSHELL_TELEMETRY_OPTOUTPara recusar a telemetria, defina a variável de ambiente como
true,yesou1. Para obter mais informações, consulte about_Telemetry.Para que essa variável de ambiente tenha efeito, ela deve ser definida antes de iniciar o processo do PowerShell. Consulte as seções anteriores para obter informações sobre como criar variáveis de ambiente persistentes.
POWERSHELL_DISTRIBUTION_CHANNELA partir do PowerShell 7.2, essa variável de ambiente é definida pelos pacotes do instalador para registrar o método e a fonte de instalação do PowerShell.
Essas informações são incluídas nos dados de telemetria enviados à Microsoft. Os usuários não devem alterar esse valor.
POWERSHELL_UPDATECHECKO comportamento de notificação de atualização pode ser alterado usando a variável de ambiente
POWERSHELL_UPDATECHECK. Para obter mais informações, consulte about_Update_Notifications.Há suporte para os seguintes valores:
-
Offdesativa o recurso de notificação de atualização -
Defaulté o mesmo que não definirPOWERSHELL_UPDATECHECK:- As versões GA notificam atualizações de versões GA
- As versões RC/Versão prévia notificam atualizações de GA e versão prévia
-
LTSnotifica apenas sobre atualizações de versões GA de LTS (manutenção em longo prazo)
Valores não padrão da variável de ambiente devem ser definidos antes de iniciar o processo do PowerShell. Consulte as seções anteriores para obter informações sobre como criar variáveis de ambiente persistentes.
-
POWERSHELL_DIAGNOSTICS_OPTOUTEssa variável de ambiente foi adicionada ao PowerShell 7.6-preview.5. Por padrão, o PowerShell cria um pipe nomeado que é usado para IPC (comunicação entre processos), como
Enter-PSHostProcess. O PowerShell cria o pipe nomeado na inicialização para que ele esteja disponível para uso quando necessário.Em plataformas não Windows, pipes nomeados são implementados como arquivos na
/tmppasta. Se o PowerShell falhar, esses arquivos poderão não ser excluídos. Com o tempo, esses arquivos podem se acumular.A partir do PowerShell 7.6,
POWERSHELL_DIAGNOSTICS_OPTOUTestá definido comofalse. Para desativar a criação do pipe nomeado, defina a variável de ambiente comotrue,yesou1.PSExecutionPolicyPreferenceArmazena o conjunto de políticas de execução para a sessão atual. Essa variável de ambiente só existe quando você define uma política de execução para uma única sessão. Você pode fazer isso de duas maneiras diferentes.
Inicie uma sessão da linha de comando usando o parâmetro ExecutionPolicy para definir a política de execução para a sessão.
Use o cmdlet
Set-ExecutionPolicy. Use o parâmetro Scope com um valor deProcess.Defina manualmente a variável de ambiente. Alterar o valor dessa variável altera a política de execução do processo atual.
Essas informações se aplicam apenas à plataforma Windows. Para mais informações, veja about_Execution_Policies.
PSModulePathA variável de ambiente
$Env:PSModulePathcontém uma lista de locais de pasta que são pesquisados para localizar módulos e recursos. No Windows, a lista de locais de pasta é separada pelo caractere de ponto e vírgula (;). Em plataformas que não são Windows, os dois-pontos (:) separam os caminhos das pastas na variável de ambiente.Por padrão, os locais efetivos atribuídos a
$Env:PSModulePathsão:Locais em todo o sistema: essas pastas contêm módulos que são fornecidos com o PowerShell. Os módulos são armazenados no local
$PSHOME\Modules. Além disso, esse é o local onde os módulos de gerenciamento do Windows estão instalados.Módulos instalados pelo usuário: são módulos instalados pelo usuário.
Install-Moduletem 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.- No Windows, o local do escopo específico do usuário CurrentUser é a pasta
$HOME\Documents\PowerShell\Modules. O local do escopo AllUsers é$Env:ProgramFiles\PowerShell\Modules. - Em sistemas não Windows, o local do escopo específico do usuário CurrentUser é a pasta
$HOME/.local/share/powershell/Modules. O local do escopo AllUsers é/usr/local/share/powershell/Modules.
- No Windows, o local do escopo específico do usuário CurrentUser é a pasta
Além disso, programas de configuração que instalam módulos em outros diretórios, como o diretório Arquivos de Programas, podem adicionar suas localizações ao valor de
$Env:PSModulePath.Para obter mais informações, consulte about_PSModulePath.
PSModuleAnalysisCachePathO PowerShell fornece controle sobre o arquivo usado para armazenar em cache dados sobre módulos e seus cmdlets. O cache é lido na inicialização durante a pesquisa de um comando e é gravado em um thread em segundo plano em algum momento após a importação de um módulo.
O local padrão do cache é:
- Windows PowerShell 5.1:
$Env:LOCALAPPDATA\Microsoft\Windows\PowerShell - PowerShell 6.0 e superior:
$Env:LOCALAPPDATA\Microsoft\PowerShell - Padrão não Windows:
~/.cache/powershell
O nome de arquivo padrão para o cache é
ModuleAnalysisCache. Quando você tiver várias instâncias do PowerShell instaladas, o nome do arquivo inclui um sufixo hexadecimal para que haja um nome de arquivo exclusivo por instalação.Nota
Se a descoberta de comandos não estiver funcionando corretamente, por exemplo, o IntelliSense mostrará comandos que não existem, você poderá excluir o arquivo de cache. O cache será recriado na próxima vez que você iniciar o PowerShell.
Para alterar o local padrão do cache, defina a variável de ambiente antes de iniciar o PowerShell. O valor deve nomear um caminho completo (incluindo nome de arquivo) que o PowerShell tem permissão para criar e gravar arquivos.
As alterações a esta variável de ambiente afetam apenas processos filho. Consulte as seções anteriores para obter informações sobre como criar variáveis de ambiente persistentes.
Para desabilitar o cache de arquivos, defina esse valor como um local inválido, por exemplo:
# `NUL` here is a special device on Windows that can't be written to, # on non-Windows you would use `/dev/null` $Env:PSModuleAnalysisCachePath = 'NUL'Isso define o caminho para o dispositivo NUL. O PowerShell não consegue gravar no caminho, mas nenhum erro é retornado. Você pode ver os erros relatados usando um rastreador:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }- Windows PowerShell 5.1:
PSDisableModuleAnalysisCacheCleanupAo escrever o cache de análise de módulo, o PowerShell verifica se há módulos que não existem mais para evitar um cache desnecessariamente grande. Às vezes, essas verificações não são desejáveis, nesse caso, você pode desativá-las definindo esse valor de variável de ambiente como
1.A configuração dessa variável de ambiente entra em vigor para eventos de limpeza subsequentes no processo atual. Para garantir que a limpeza esteja desabilitada na inicialização, você deve definir a variável de ambiente antes de iniciar o PowerShell. Consulte as seções anteriores para obter informações sobre como criar variáveis de ambiente persistentes.
Outras variáveis de ambiente usadas pelo PowerShell
Informações de caminho
PATHA variável de ambiente
$Env:PATHcontém uma lista de locais de pasta que o sistema operacional pesquisa por arquivos executáveis. No Windows, a lista de locais de pasta é separada pelo caractere de ponto e vírgula (;). Em plataformas que não são Windows, os dois-pontos (:) separam os caminhos das pastas na variável de ambiente.PATHEXTA variável
$Env:PATHEXTcontém uma lista de extensões de arquivo que o Windows considera como arquivos executáveis. Quando um arquivo de script com uma das extensões listadas é executado do PowerShell, o script é executado no console atual ou na sessão de terminal. Se a extensão de arquivo não estiver listada, o script será executado em uma nova sessão de console.Para garantir que os scripts de outra linguagem de script são executados na sessão do console atual, adicione a extensão de arquivo usada pela linguagem de script. Por exemplo, para executar scripts Python no console atual, adicione a extensão
.pyà variável de ambiente. Para que o Windows dê suporte à extensão.pycomo um arquivo executável, você deve registrar a extensão de arquivo usando os comandosftypeeassocdo shell de comando do CMD. O PowerShell não tem nenhum método direto para registrar o manipulador de arquivos. Para obter mais informações, consulte a documentação do comando ftype.Os scripts do PowerShell sempre começam na sessão do console atual. Você não precisa adicionar a extensão
.ps1.Variáveis
XDGEm plataformas que não são do Windows, o PowerShell usa as seguintes variáveis de ambiente XDG, conforme definido pela Especificação do Diretório Base XDG .
XDG_CONFIG_HOMEXDG_DATA_HOMEXDG_CACHE_HOME
Recursos do terminal
A partir do PowerShell 7.2, as variáveis de ambiente a seguir podem ser usadas para controlar os recursos do Terminal Virtual, como sequências de escape ANSI que colorem a saída. O suporte para sequências de escape ANSI pode ser desativado usando as variáveis de ambiente TERM ou NO_COLOR.
TERMOs seguintes valores do
$Env:TERMalteram o comportamento da seguinte forma:-
dumb-Define$Host.UI.SupportsVirtualTerminal = $false -
xterm-mono-Define$PSStyle.OutputRendering = PlainText -
xterm-Define$PSStyle.OutputRendering = PlainText
-
NO_COLORSe
$Env:NO_COLORexistir,$PSStyle.OutputRenderingserá definido comoPlainText. Para obter mais informações sobre a variável de ambienteNO_COLOR, consulte https://no-color.org/.