Ambiente do PowerShell

0

Sou proficiente no bash e tenho dificuldade em entender o ambiente no PowerShell. Existe alguma maneira equivalente a /usr/bin para adicionar executáveis ao ambiente? Como o ambiente é representado no PowerShell - qual é o seu tipo?

    
por twinlakes 02.09.2015 / 01:33

1 resposta

2

Não há absolutamente nada de especial sobre /usr/bin em sistemas de arquivos * nix, exceto que é um local que está na variável de ambiente PATH por padrão para todos os usuários. O Windows tem a mesma variável de ambiente, mas os únicos locais nele por padrão para todos os usuários são coisas como C:\Windows\System32 .

Você pode usar o System32 como uma pasta bin, mas você também pode simplesmente criar uma nova pasta para as bandejas. C:\bin funcionaria, embora, por padrão, fosse gravável por todos os usuários, portanto, você pode querer ajustar as permissões e, em seguida, adicioná-lo à variável de ambiente PATH para toda a máquina, para que todos os usuários possam executá-las facilmente. Como alternativa, considere uma pasta bin no diretório de cada usuário, com seu caminho na variável de ambiente PATH por usuário (quando uma variável de ambiente é definida em armazenamentos de usuários e de máquinas, ela é concatenada em uso real, máquina primeiro).

O PowerShell coloca todas as variáveis de ambiente em uma "unidade" virtual chamada Env: (semelhante a C: para arquivos ou HKLM: para a seção de registro HKLM). Leia mais sobre isso aqui: link Você pode acessar as variáveis de ambiente via $env:<VARNAME> como qualquer outra variável (o tipo é String) ; por exemplo, você pode anexar a PATH (nota: nomes de variáveis de ambiente do Windows diferenciam maiúsculas de minúsculas) da seguinte forma:

$env:path = $env:path + ";C:\foo\bar\baz"

Isso só define o processo atual (e seus filhos), no entanto. Se você quiser armazenar o valor no registro para que eles fiquem visíveis para outros processos, ou até mesmo outros usuários (nota: variáveis de ambiente de edição que afetam outros usuários requer privilégios de administrador), a maneira mais fácil é usar classes .NET ( O PowerShell é basicamente ".NETscript"). Por exemplo, para adicionar essa pasta à variável de ambiente PATH de toda a máquina, você faria o seguinte (como Admin):

[System.Environment]::SetEnvironmentVariable("path", $env:path + "C:\foo\bar\baz", "Machine")

O parâmetro final é a representação em string de um valor na System.EnvironmentVariableTaget enum , conforme usado pelo método estático System.Environment.SetEnvironmentVariable .

Você certamente pode criar um script / cmdlet que simplifique a chamada dessa função. Você também pode usar a função [System.Environment]::GetEnvironmentVariable(name, [optional store]) static para ler variáveis de ambiente diretamente dos armazenamentos do Usuário ou da Máquina. Novamente, todas as variáveis de ambiente são Strings (e quando você obtém uma coleção delas, é um Dictionary).

    
por 02.09.2015 / 02:33