Sobre Variáveis de Ambiente
- 09/22/2020
- 8 minutos para ler
-
- S
- r
- s
- d
- c
- div>+1
/li>
DESCRIÇÃO DO CORTÃO
Descrifica como aceder às variáveis de ambiente Windows no PowerShell.
DESCRIÇÃO A LONGO PRAZO
A variáveis de ambiente armazenam informação sobre o ambiente do sistema operativo. Esta informação inclui detalhes tais como o sistema operativo, o número de processadores utilizados pelo sistema operativo, e a localização das pastas temporárias.
As variáveis de ambiente armazenam dados que são utilizados pelo sistema operativo e outros programas. Por exemplo, a variável de ambiente WINDIR
contém a localização do directório de instalação do Windows. Os programas podem consultar o valor desta variável para determinar onde estão localizados os ficheiros do sistema operativo Windows.
PowerShell pode aceder e gerir variáveis de ambiente em qualquer uma das plataformas de sistema supportedoperating. O fornecedor de ambiente PowerShell simplifica este processo, facilitando a visualização e alteração de variáveis de ambiente.
Variáveis de ambiente, ao contrário de outros tipos de variáveis no PowerShell, são herdadas por processos infantis, tais como trabalhos locais de fundo e as sessões em que os membros do módulo correm. Isto faz com que as variáveis de ambiente se adaptem bem aos valores de restauração que são necessários tanto nos processos dos pais como dos filhos.
Variáveis de ambiente de utilização e mudança
No Windows, as variáveis de ambiente podem ser definidas em três âmbitos:
- Escopo da máquina (ou Sistema)
- Escopo do utilizador
- Escopo do processo
O âmbito do processo contém as variáveis de ambiente disponíveis no processo actual, ou sessão PowerShell. Esta lista de variáveis é herdada do processo de origem e é construída a partir das variáveis nos âmbitos Máquina e Utilizador. As plataformas baseadas em Unix só têm o âmbito do Processo.
P>Pode exibir e alterar os valores das variáveis de ambiente sem utilizar acmdlet, utilizando uma sintaxe de variável com o fornecedor do ambiente. Para exibir o valor de uma variável de ambiente, use a seguinte sintaxe:
$Env:<variable-name>
Por exemplo, para exibir o valor da variável de ambiente WINDIR
, digite o seguinte comando no prompt de comando PowerShell:
$Env:windir
Nesta sintaxe, o sinal dólar ($
) indica uma variável, e o nome da unidade(Env:
) indica uma variável de ambiente seguida do nome da variável(windir
).
Quando se altera as variáveis de ambiente no PowerShell, a alteração afecta apenas a sessão actual. Este comportamento assemelha-se ao comportamento do comando Set
na Shell de Comando do Windows e do comando Setenv
em ambientes baseados em UNIX. Para alterar valores nos âmbitos Máquina ou Utilizador, é necessário utilizar os métodos da classe System.Environment.
para fazer alterações às variáveis de âmbito Máquina, também tem de ter permissão. Se tentar alterar um valor sem permissão suficiente, o comando falha ePowerShell exibe um erro.
É possível alterar os valores das variáveis sem utilizar um cmdlet utilizando a seguinte sintaxe:
$Env:<variable-name> = "<new-value>"
Por exemplo, para anexar ao valor do Path
environmentvariable, utilize a seguinte sintaxe:
$Env:Path += ";c:\temp"
No Linux ou macOS, os dois pontos (:
) no comando separa o novo caminho do caminho que o precede na lista.
$Env:PATH += ":/usr/local/temp"
Também pode usar o item cmdlets, como Set-Item
Remove-Item
, eCopy-Item
para alterar os valores das variáveis de ambiente. Por exemplo, para usar o Set-Item
cmdlet para anexar ;c:\temp
ao valor da variável Path
ambiente, usar a seguinte sintaxe:
Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")
Neste comando, o valor é incluído entre parênteses de modo a ser interpretado como uma unidade.
Variáveis ambientais que armazenam preferências
Características de PowerShell podem utilizar variáveis de ambiente para armazenar as preferências dos utilizadores. Estas variáveis funcionam como variáveis de preferência, mas são herdadas pelas crianças das sessões em que são criadas. Para mais informações sobre variáveis de preferência, ver about_preference_variables.
As variáveis de ambiente que armazenam preferências incluem:
-
PSExecutionPolicyPreference
Armazena a política de execução definida para a sessão actual. Esta variável de ambiente só existe quando se define uma política de execução para uma única sessão. Pode fazê-lo de duas maneiras diferentes.
-
Iniciar uma sessão a partir da linha de comando utilizando o ExecutionPolicyparameter para definir a política de execução para a sessão.
-
Utilizar o
Set-ExecutionPolicy
cmdlet. Utilizar o parâmetro Escopo com o valor de “Process”.Para mais informações, ver about_Execution_Policies.
-
-
PSModuleAnalysisCachePath
PowerShell fornece controlo sobre o ficheiro que é utilizado para guardar os dados sobre os módulos e as suas cmdlets. A cache é lida na inicialização enquanto se procura o comando e é escrita num fio de fundo algum tempo depois de um módulo ser importado.
Local por defeito da cache é:
- Windows PowerShell 5.1:
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
- PowerShell 6.0 e superior:
$env:LOCALAPPDATA\Microsoft\PowerShell
- Non-Windows por defeito:
~/.cache/powershell
O nome de ficheiro por defeito para a cache é
ModuleAnalysisCache
. Quando tem várias instâncias de PowerShell instaladas, o nome do ficheiro inclui um sufixo hexadecimal para que haja um nome de ficheiro único por instalação.Nota
Se a descoberta de comandos não estiver a funcionar correctamente, por exemplo comandos Intellisenseshows que não existem, pode apagar o ficheiro de cache. A cache é recriada da próxima vez que iniciar PowerShell.
Para alterar a localização por defeito da cache, defina a variável de ambiente antes de iniciar PowerShell. As alterações a esta variável de ambiente só afectam os processos da criança. O valor deve nomear um caminho completo (incluindo nome do ficheiro)que PowerShell tem permissão para criar e escrever ficheiros.
Para desactivar a cache de ficheiros, defina este valor para um local inválido, forexample:
# `NUL` here is a special device on Windows that cannot be written to,# on non-Windows you would use `/dev/null`$env:PSModuleAnalysisCachePath = 'NUL'
Isto define o caminho para o dispositivo NUL. PowerShell não pode escrever para o caminho mas nenhum erro é devolvido. É possível ver os erros reportados utilizando o atracer:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
- Windows PowerShell 5.1:
-
PSDisableModuleAnalysisCacheCleanup
Ao escrever a cache de análise do módulo, o PowerShell verifica se existem módulos que já não existem para evitar uma cache desnecessariamente grande. Por vezes estas verificações não são desejáveis, caso em que pode desligá-las definindo o valor desta variável de ambiente para
1
.A definição desta variável de ambiente tem efeito imediato no processo actual.
-
PSModulePath
A variável de ambiente
$env:PSModulePath
contém uma lista de localizações de pastas que são pesquisadas para encontrar módulos e recursos.Por defeito, as localizações efectivas atribuídas a
$env:PSModulePath
são:- p>p> localizações em todo o sistema: Estas pastas contêm módulos que são enviados comPowerShell. Os módulos são armazenados na pasta
$PSHOME\Modules
localização. Também,este é o local onde os módulos de gestão do Windows são instalados. -
módulos instalados pelo utilizador: Estes são módulos instalados pelo utilizador.
Install-Module
tem um parâmetro Scope que lhe permite especificar se o módulo está instalado para o utilizador actual ou para todos os utilizadores. Para mais informações, ver Install-Module.- li>No Windows, a localização do âmbito específico do utilizador actual é a pasta
$HOME\Documents\PowerShell\Modules
. A localização do âmbito do Utilizador Actual é a pasta$env:ProgramFiles\PowerShell\Modules
. - Em sistemas sem janelas, a localização do âmbito do Utilizador Actual específico do utilizador é a pasta
$HOME/.local/share/powershell/Modules
. A localização do âmbito do AllUserscope é/usr/local/share/powershell/Modules
.
- p>p> localizações em todo o sistema: Estas pastas contêm módulos que são enviados comPowerShell. Os módulos são armazenados na pasta
Além disso, os programas de configuração que instalam módulos noutros directórios, tais como o directório Ficheiros de Programas, podem anexar as suas localizações ao valor de$env:PSModulePath
.
Para mais informações, ver sobre_PSModulePath.
Gerir variáveis de ambiente
PowerShell fornece vários métodos diferentes para gerir variáveis de ambiente.
- >li>A unidade do fornecedor de ambiente
- O Item cmdlets
- O .NET System.Environment class
- No Windows, o Painel de Controlo do Sistema
Usando o fornecedor de Ambiente
Cada variável de ambiente é representada por uma instância doSystem.Collections.DictionaryEntry class. Em cada DictionaryEntryobject, o nome da variável de ambiente é a chave do dicionário. O valor da variável é o valor do dicionário.
Para exibir as propriedades e métodos do objecto que representa a variável de ambiente no PowerShell, usar o Get-Member
cmdlet. Por exemplo, para exibir os métodos e propriedades de todos os objectos na unidade Env:
drive,type:
Get-Item -Path Env:* | Get-Member
O fornecedor de Ambiente PowerShell permite-lhe aceder a variáveis de ambiente numa unidade PowerShell (a unidade Env:
drive). Esta unidade parece-se muito com uma unidade de sistema de ficheiros. Para ir ao Env:
drive, digite:
Set-Location Env:
Utiliza os cmdlets de conteúdo para obter ou definir os valores de uma variável de ambiente.
PS Env:\> Set-Content -Path Test -Value 'Test value'PS Env:\> Get-Content -Path TestTest value
Pode ver as variáveis de ambiente no Env:
unidade de qualquer outra unidadePowerShell, e pode ir para o Env:
unidade para ver e alterar as variáveis de ambiente.
Utilizando Item cmdlets
Quando se refere a uma variável de ambiente, digite o Env:
nome da unidade seguido do nome da variável. Por exemplo, para exibir o valor da variável de ambienteCOMPUTERNAME
type:
Get-ChildItem Env:Computername
Para exibir os valores de todas as variáveis de ambiente, digite:
Get-ChildItem Env:
Porque as variáveis de ambiente não têm itens filhos, a saída de Get-Item
e Get-ChildItem
é a mesma.
Por defeito, PowerShell mostra as variáveis de ambiente na ordem em que as recupera. Para ordenar a lista de variáveis de ambiente pelo nome da variável,pipe a saída de um Get-ChildItem
comando para o Sort-Object
cmdlet. Forexample, de qualquer drive PowerShell, digite:
Get-ChildItem Env: | Sort Name
Também pode entrar no Env:
drive usando o Set-Location
cmdlet:
Set-Location Env:
Quando estiver no Env:
drive, pode omitir o Env:
drive name from thepath. Por exemplo, para exibir todas as variáveis de ambiente, digite:
PS Env:\> Get-ChildItem
para exibir o valor da variável COMPUTERNAME
de dentro da variável Env:
drive, digite:
PS Env:\> Get-ChildItem ComputerName
Saving changes to environment variables
Para fazer uma alteração persistente a uma variável de ambiente no Windows, utilize o Painel de Controlo do Sistema. Seleccione Definições Avançadas do Sistema. Na opção Advancedtab, clicar em Environment Variable…. É possível adicionar ou editar variáveis de ambiente existentes nos âmbitos Utilizador e Sistema (Máquina). O Windows escreve estes valores no Registo para que persistam durante as sessões e o sistema reinicie.
p>Alternately, pode adicionar ou alterar variáveis de ambiente no seu PowerShellprofile. Este método funciona para qualquer versão do PowerShell em qualquer plataforma suportada.
Using System.Environment methods
The System.Environment class provides GetEnvironmentVariable andSetEnvironmentVariable methods that allow you to specify the scope of thevariable.
O exemplo seguinte utiliza o método GetEnvironmentVariable para obter a configuração da máquina de PSModulePath
e o método SetEnvironmentVariable para adicionar o C:\Program Files\Fabrikam\Modules
caminho para o valor.
$path = ::GetEnvironmentVariable('PSModulePath', 'Machine')$newpath = $path + ';C:\Program Files\Fabrikam\Modules'::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')
Para mais informações sobre os métodos da classe System.Environment, verEnvironment Methods.
SEE ALSO
- Environment (provider)
- sobre_Módulos