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.
function cmd_special()
{
$orig_master = $env:app_master
$env:app_master = 'http://host.example.com'
mycmd $args
$env:app_master = $orig_master
}
O mesmo mycmd
ocorre com alguns executáveis que operam de maneira diferente dependendo do valor da variável de ambiente app_master
. Ao definir cmd_special
, agora posso executar a cmd_special
partir da linha de comando (incluindo outros parâmetros) com a app_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.
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
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:
with-env app_master='http://host.example.com' mycmd
Talvez um guru do PowerShell possa sugerir como escrever esse cmdlet.