No Linux, posso fazer:
$ FOO=BAR ./myscript
para chamar "myscript" com a variável de ambiente FOO sendo definida.
Algo semelhante é possível no PowerShell, ou seja, sem ter que primeiro definir a variável, chamar o comando e, em seguida, cancelar a definição da variável novamente?
Para ser mais claro sobre meu caso de uso - não quero usar isso como parte de um script. Em vez disso, tenho um script de terceiros cujo comportamento posso controlar usando variáveis de ambiente, mas, neste caso, não argumentos de linha de comando. Portanto, ser capaz de alternar entre digitar
$ OPTION=1 ./myscript
e
$ ./myscript
seria muito útil.
windows
powershell
scripting
variables
environment
miracle2k
fonte
fonte
Respostas:
Geralmente, seria melhor passar informações para o script por meio de um parâmetro em vez de uma variável global (ambiente). Mas se é isso que você precisa fazer, você pode fazer desta forma:
A variável de ambiente $ env: FOO pode ser excluída posteriormente da seguinte forma:
fonte
env:foo
voltar ao valor antigo (talvez não definido ) em vez de removê-lo?& {$pre = $env:foo; $env:foo = 'bar'; ./myscript; if ($pre) {$env:foo = $pre} else {Remove-Item env:\foo}
... alguns podem dizer pesado , mas evitará efeitos colaterais ...Fiquei motivado o suficiente sobre este problema que fui em frente e escrevi um script para ele: with-env.ps1
Uso:
Por outro lado, se você instalar o Gow, poderá usar o
env.exe
que pode ser um pouco mais robusto do que o script rápido que escrevi acima.Uso:
fonte
Para realizar o equivalente da sintaxe Unix, você não só precisa definir a variável de ambiente, mas também redefini-la para seu valor anterior após executar o comando. Eu fiz isso para comandos comuns que uso adicionando funções semelhantes às seguintes ao meu perfil do PowerShell.
O mesmo
mycmd
ocorre com alguns executáveis que operam de maneira diferente dependendo do valor da variável de ambienteapp_master
. Ao definircmd_special
, agora posso executar acmd_special
partir da linha de comando (incluindo outros parâmetros) com aapp_master
variável de ambiente definida ... e ela é redefinida (ou mesmo removida) após a execução do comando.Presumivelmente, você também pode fazer isso ad-hoc para uma única invocação.
Realmente deveria ser mais fácil do que isso, mas aparentemente este não é um caso de uso que seja prontamente compatível com o PowerShell. Talvez uma versão futura (ou função de terceiros) facilite esse caso de uso. Seria bom se o PowerShell tivesse um cmdlet que faria isso, por exemplo:
Talvez um guru do PowerShell possa sugerir como escrever esse cmdlet.
fonte
Duas maneiras fáceis de fazer em uma única linha:
Apenas informações resumidas de outras respostas (obrigado pessoal) que não contêm frases curtas puras por algum motivo.
fonte
Considerando que o CMD é a CLI nativa no kernel do Windows (e ainda é a interface de automação para muitas ferramentas), você pode estar executando o script do PowerShell com
powershell.exe
o prompt do CMD ou uma interface que aceita instruções do console do CMD.Se você estiver usando o
-File
parâmetro para passar seu scriptpowershell.exe
, nenhum outro código do PowerShell pode ser usado para definir uma variável de ambiente para o script acessar, então, em vez disso, você pode definir suas variáveis de ambiente no ambiente CMD antes de chamarpowershell.exe
:Um único
&
também funcionará, mas permitirá que o comando continue se houverset
falha por algum motivo. (Isso é mesmo possível? Não tenho ideia.)Além disso, pode ser mais seguro colocar
"foo=bar"
aspas para que nada que se segue seja passadoset
como conteúdo da variável.fonte
https://gist.github.com/bobalob/6632690e33747c13a8c00875ee686be2
fonte
Você pode definir o escopo de variáveis para funções e scripts.
New-Variable também tem um parâmetro -scope se você quiser ser formal e declarar sua variável usando new-variable.
fonte