about_Environment_Variables
Breve descrição
Descreve como acessar e gerenciar variáveis de ambiente no PowerShell.
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_OPTOUT
POWERSHELL_DISTRIBUTION_CHANNEL
POWERSHELL_UPDATECHECK
PSExecutionPolicyPreference
PSModulePath
PSModuleAnalysisCachePath
PSDisableModuleAnalysisCacheCleanup
Para obter descrições completas dessas variáveis, consulte as variáveis de ambiente do PowerShell deste artigo.
Descrição longa
O PowerShell pode acessar e gerenciar variáveis de ambiente em qualquer uma das plataformas de sistema operacional suportadas. 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 das variáveis de ambiente no macOS e 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.
As variáveis de ambiente, ao contrário de outros tipos de variáveis no PowerShell, são sempre armazenadas como cadeias de caracteres. Também ao contrário de outras variáveis, elas são herdadas por processos filho, como trabalhos em segundo plano locais e as sessões nas quais os membros do módulo são executados. Isso torna as variáveis de ambiente adequadas para armazenar valores que são necessários nos processos pai e filho.
No Windows, as variáveis de ambiente podem ser definidas em três escopos:
- Escopo da máquina (ou sistema)
- Âmbito do utilizador
- Âmbito 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 Máquina e Usuário .
Quando você altera variáveis de ambiente no PowerShell, a alteração afeta apenas a sessão atual. Esse comportamento é semelhante ao set
comportamento do comando no shell de comando do Windows e o setenv
comando em ambientes baseados em UNIX. Para alterar valores nos escopos Machine ou User, você deve usar os métodos da classe System.Environment .
Para fazer alterações nas variáveis de escopo da máquina, 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 variável
- O provedor de ambiente e os cmdlets 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 WINDIR
ambiente:
$Env:windir
C:\Windows
Nesta sintaxe, o cifrão ($
) indica uma variável e o nome da unidade (Env:
) indica 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 Foo
variável de ambiente:
$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!
No PowerShell, uma variável de ambiente não pode ser definida como uma cadeia de caracteres vazia. Definir uma variável de ambiente como $null
ou uma cadeia de caracteres vazia a remove da sessão atual. Por exemplo:
$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+ ~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Get-Member], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
Get-Member
retornou um erro porque a variável de ambiente foi removida.
Você pode ver que ele não retorna um erro quando você usá-lo em uma cadeia de caracteres vazia:
'' | Get-Member -MemberType Properties
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property int Length {get;}
Para obter mais informações sobre variáveis no PowerShell, consulte about_Variables.
Usar o provedor de ambiente e os cmdlets Item
O provedor de Ambiente do PowerShell oferece uma interface para interagir com variáveis de ambiente em um formato que se assemelha a uma unidade do sistema de arquivos. Ele permite obter, adicionar, alterar, limpar e excluir variáveis e valores de ambiente no PowerShell.
Por exemplo, para criar a Foo
variável de ambiente 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-Item
, e 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 Get-ChildItem
cmdlet para ver uma lista completa de variáveis de ambiente:
Get-ChildItem Env:
Para obter mais informações sobre como usar o provedor de ambiente para gerenciar variáveis de ambiente, consulte about_Environment_Provider.
Use os métodos System.Environment
A classe System.Environment fornece os GetEnvironmentVariable()
métodos e SetEnvironmentVariable()
para obter e modificar variáveis de ambiente.
O exemplo a seguir cria uma nova variável de ambiente, , com um valor de Bar
e, em seguida, Foo
retorna seu valor.
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
Você pode remover uma variável de ambiente com o SetEnvironmentVariable()
método especificando uma cadeia de caracteres vazia para o valor da variável. Por exemplo, para remover a variável de Foo
ambiente:
[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')
Para obter mais informações sobre os métodos da classe System.Environment, consulte Métodos de ambiente.
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 no seu perfil
- Utilização do
SetEnvironmentVariable()
método - Use o Painel de Controle do Sistema
Definir variáveis de ambiente no seu perfil
Qualquer variável de ambiente adicionada ou alterada 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 suportada.
Por exemplo, para criar a CompanyUri
variável de ambiente e atualizar a variável de Path
ambiente para incluir a C:\Tools
pasta, 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 seu perfil do PowerShell com a $PROFILE
variável 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 SetEnvironmentVariable()
método como o terceiro parâmetro para definir a variável de ambiente nesse escopo. Os escopos da máquina 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 Foo
de ambiente com o valor Bar
para o escopo da máquina:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
Você pode excluir uma variável de ambiente do escopo do usuário ou da máquina 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 Usuário e Sistema (Máquina). 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.
- Vá para a guia Avançado .
- Selecione Variáveis de Ambiente....
- Faça as suas alterações.
Criar variáveis de ambiente persistentes em plataformas que não sejam 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 (login), você pode definir variáveis de ambiente nos arquivos de inicialização global suportados pelo sistema operacional. Por exemplo, no Linux, você pode adicionar variáveis de /etc/environment
ambiente ao arquivo ou criar um script que define variáveis de ambiente e colocá-lo na /etc/profile.d
pasta. No macOS, você pode adicionar variáveis de /etc/profile
ambiente ao arquivo.
Ao iniciar o PowerShell a partir de outro shell, você pode definir variáveis de ambiente nos arquivos de inicialização específicos do shell usados por shells que não fazem login, como ~/.bashrc
for bash
ou ~/.zshrc
for zsh
.
Para obter mais informações, consulte a documentação do seu sistema operacional e 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_OPTOUT
Para desativar a telemetria, defina a variável de ambiente como
true
,yes
ou1
. 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_CHANNEL
A partir do PowerShell 7.2, essa variável de ambiente é definida pelos pacotes do instalador para registrar o método e a origem da instalação do PowerShell.
Essas informações estão incluídas nos dados de telemetria enviados à Microsoft. Os usuários não devem alterar esse valor.
POWERSHELL_UPDATECHECK
O comportamento da notificação de atualização pode ser alterado usando a variável de
POWERSHELL_UPDATECHECK
ambiente. Para obter mais informações, consulte about_Update_Notifications.Os seguintes valores são suportados:
Off
Desativa o recurso de notificação de atualizaçãoDefault
é o mesmo que não definirPOWERSHELL_UPDATECHECK
:- Notificações de versões do GA sobre atualizações nas versões do GA
- As versões de pré-visualização/RC notificam as atualizações do GA e as versões de pré-visualização
LTS
notifica apenas atualizações de versões de GA de manutenção de longo prazo (LTS)
Os 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.
PSExecutionPolicyPreference
Armazena a política de execução definida para a sessão atual. Essa variável de ambiente existe somente 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 a partir da linha de comando usando o parâmetro ExecutionPolicy para definir a política de execução para a sessão.
Use o
Set-ExecutionPolicy
cmdlet. 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.
Estas informações aplicam-se apenas à plataforma Windows. Para obter mais informações, consulte about_Execution_Policies.
PSModulePath
A
$env:PSModulePath
variável de ambiente contém uma lista de locais de pastas que são pesquisados para localizar módulos e recursos. No Windows, a lista de locais de pastas é separada pelo caractere ponto-e-vírgula (;
). Em plataformas que não sejam Windows, os dois pontos (:
) separam os locais das pastas na variável de ambiente.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. Os módulos são armazenados no
$PSHOME\Modules
local. Além disso, este é 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-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, consulte Install-Module.- No Windows, o local do escopo CurrentUser específico do usuário é a
$HOME\Documents\PowerShell\Modules
pasta. O local do escopo AllUsers é$env:ProgramFiles\PowerShell\Modules
. - Em sistemas que não sejam Windows, o local do escopo CurrentUser específico do usuário é a
$HOME/.local/share/powershell/Modules
pasta. O local do escopo AllUsers é/usr/local/share/powershell/Modules
.
- No Windows, o local do escopo CurrentUser específico do usuário é a
Além disso, os programas de instalação que instalam módulos em outros diretórios, como o diretório Arquivos de Programas, podem acrescentar seus locais ao valor de
$env:PSModulePath
.Para obter mais informações, consulte about_PSModulePath.
PSModuleAnalysisCachePath
O PowerShell fornece controle sobre o arquivo usado para armazenar em cache dados sobre módulos e seus cmdlets. O cache é lido na inicialização enquanto procura um comando e é escrito em um thread em segundo plano algum tempo depois que um módulo é importado.
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ê tem 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 é 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 tenha permissão para criar e gravar arquivos.
As alterações nessa variável de ambiente afetam apenas os processos filho. Consulte as seções anteriores para obter informações sobre como criar variáveis de ambiente persistentes.
Para desativar 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 pode 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:
PSDisableModuleAnalysisCacheCleanup
Ao 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, caso em que você pode desativá-las definindo esse valor de variável de ambiente como
1
.A definição dessa variável de ambiente entra em vigor para eventos de limpeza subsequentes no processo atual. Para garantir que a limpeza seja 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 sobre o caminho
PATH
A
$env:PATH
variável de ambiente contém uma lista de locais de pasta que o sistema operacional procura por arquivos executáveis. No Windows, a lista de locais de pastas é separada pelo caractere ponto-e-vírgula (;
). Em plataformas que não sejam Windows, os dois pontos (:
) separam os locais das pastas na variável de ambiente.PATHEXT
A
$env:PATHEXT
variável conté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 a partir do PowerShell, o script é executado no console atual ou na sessão do terminal. Se a extensão do arquivo não estiver listada, o script será executado em uma nova sessão de console.Para garantir que os scripts para outra linguagem de script sejam executados na sessão de console atual, adicione a extensão de arquivo usada pela linguagem de script. Por exemplo, para executar scripts Python no console atual, adicione a
.py
extensão à variável de ambiente. Para que o Windows suporte a.py
extensão como um arquivo executável, você deve registrar a extensão de arquivo usando osftype
comandos eassoc
do shell de comando 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 são iniciados na sessão de console atual. Não é necessário adicionar a
.PS1
extensão.XDG
variáveisEm plataformas que não sejam Windows, o PowerShell usa as seguintes variáveis de ambiente XDG, conforme definido pela Especificação de Diretório Base XDG.
XDG_CONFIG_HOME
XDG_DATA_HOME
XDG_CACHE_HOME
Características do terminal
A partir do PowerShell 7.2, as seguintes variáveis de ambiente 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 TERM
variáveis ou NO_COLOR
de ambiente.
TERM
Os seguintes valores de
$env:TERM
alterar o comportamento da seguinte maneira:dumb
- conjuntos$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
- conjuntos$PSStyle.OutputRendering = PlainText
xtermm
- conjuntos$PSStyle.OutputRendering = PlainText
NO_COLOR
Se
$env:NO_COLOR
existir, então$PSStyle.OutputRendering
está definido comoPlainText
. Para obter mais informações sobre aNO_COLOR
variável de ambiente, consulte https://no-color.org/.