about_Environment_Variables

Descrição breve

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. Por exemplo, a WINDIR variável de ambiente contém o local do diretório de instalação do Windows. Os programas podem consultar o valor dessa variável para determinar onde os arquivos do sistema operacional Windows estão localizados.

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.

Observação

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.

As variáveis de ambiente, ao contrário de outros tipos de variáveis no PowerShell, são sempre armazenadas como uma cadeia de caracteres e não podem estar vazias. Ao contrário de outras variáveis, elas são herdadas por processos filho, como trabalhos em segundo plano locais e sessões em que 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 do computador (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 Computador e Usuário .

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 Set comando no Shell de Comando do Windows e ao Setenv comando em ambientes baseados em UNIX. Para alterar valores nos escopos Computador ou Usuário, você deve usar os métodos da classe System.Environment .

Para fazer alterações em variáveis no escopo do 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 item
  • A classe .NET System.Environment

Usando 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

Nessa sintaxe, o sinal de dólar ($) 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 variável de Foo 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!

Como uma variável de ambiente não pode ser uma cadeia de caracteres vazia, definir uma como $null ou uma cadeia de caracteres vazia a remove. 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ê o usa 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.

Usando 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 semelhante a uma unidade do sistema de arquivos. Ele permite obter, adicionar, alterar, limpar e excluir valores e variáveis 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-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".

Para obter mais informações sobre como usar o provedor de Ambiente para gerenciar variáveis de ambiente, consulte about_Environment_Provider.

Usando 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

Você pode remover uma variável de ambiente com o método SetEnvironmentVariable 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.

Salvando alterações em variáveis de ambiente

No Windows, há três métodos para fazer uma alteração persistente em uma variável de ambiente: defini-los em seu perfil, usar o método SetEnvironmentVariable e usar o system Painel de Controle.

Salvando 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 CompanyUri variável de ambiente e atualizar a Path variável de 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'

Observação

No Linux ou no macOS, os dois-pontos (:) são usados em vez de dois-pontos(;) para separar um novo caminho do caminho que o precede na lista.

Você pode obter o caminho para o perfil do PowerShell com a $PROFILE variável automática. Para obter mais informações sobre perfis, consulte about_Profiles.

Salvando 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 Foo de ambiente 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')

Salvando variáveis de ambiente com o Sistema Painel de Controle

No system Painel de Controle, você pode adicionar ou editar variáveis de ambiente existentes nos escopos Usuário e Sistema (Computador). 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 Sistema Painel de Controle:

  1. Abra a Painel de Controle do Sistema.
  2. Selecione Sistema.
  3. Selecione Configurações Avançadas do Sistema.
  4. Vá para a guia Avançado .
  5. Selecione Variáveis de Ambiente....
  6. Faça as alterações.

Variáveis de ambiente do PowerShell

Os recursos do PowerShell podem usar variáveis de ambiente para armazenar preferências do usuário. Essas variáveis funcionam como variáveis de preferência, mas são herdadas por sessões filho 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 recusar a telemetria, defina a variável de ambiente como true, yesou 1.

    Para obter mais informações, consulte about_Telemetry.

  • 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 fonte de instalação do PowerShell.

    Essas informações são incluídas nos dados de telemetria enviados para 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 ambiente POWERSHELL_UPDATECHECK. Os seguintes valores têm suporte:

    • Off desativa o recurso de notificação de atualização
    • Default é o mesmo que não definir POWERSHELL_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
    • LTS notifica apenas as atualizações para versões DE GA de serviço de longo prazo (LTS)

    Para obter mais informações, consulte about_Update_Notifications.

  • PSExecutionPolicyPreference

    Armazena 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 na 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 de Process.

      Para obter mais informações, consulte about_Execution_Policies.

  • Psmodulepath

    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. No Windows, a lista de locais de pasta é separada pelo caractere de ponto e vírgula (;). Em plataformas que não são do Windows, os dois-pontos (:) separam os locais da pasta na variável de ambiente.

    Por padrão, os locais efetivos atribuídos a $env:PSModulePath sã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 $PSHOME\Modules local. Além disso, este é o local onde os módulos de gerenciamento do Windows sã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 não 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.

    Além disso, 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 saber mais, confira 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 durante a pesquisa de um comando e é gravado 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 que não é 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.

    Observação

    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. As alterações nessa variável de ambiente afetam apenas os processos filho. O valor deve nomear um caminho completo (incluindo nome do arquivo) em que o PowerShell tenha permissão para criar e gravar arquivos.

    Para desabilitar o cache de arquivo, defina esse valor para 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
    }
    
  • PSDisableModuleAnalysisCacheCleanup

    Ao gravar 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 imediatamente no processo atual.

Outras variáveis de ambiente usadas pelo PowerShell

Informações de caminho

  • PATH

    A $env:PATH variável de ambiente contém uma lista de locais de pasta que o sistema operacional pesquisa 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 do Windows, os dois-pontos (:) separam os locais da pasta na variável de ambiente.

  • PATHEXT

    A $env:PATHEXT variável contém uma lista de extensões de arquivo que o Windows considera 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 do 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 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 dê suporte à .py extensão como um arquivo executável, você deve registrar a extensão de arquivo usando os ftype comandos e assoc do 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 .PS1 extensão.

  • Variáveis XDG

    Em plataformas não Windows, o PowerShell usa as seguintes variáveis de ambiente XDG, conforme definido pela Especificação do Diretório Base do XDG.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_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.

  • TERMO

    Os seguintes valores de $env:TERM alteram o comportamento conforme abaixo:

    • dumb -Define $Host.UI.SupportsVirtualTerminal = $false
    • xterm-mono -Define $PSStyle.OutputRendering = PlainText
    • xtermm -Define $PSStyle.OutputRendering = PlainText
  • NO_COLOR

    Se $env:NO_COLOR existir, será $PSStyle.OutputRendering definido como PlainText. Para obter mais informações sobre a variável de ambiente NO_COLOR , consulte https://no-color.org/.

Confira também