Para lograr el equivalente de la sintaxis de Unix, no solo debe establecer la variable de entorno, sino que debe restablecerla a su valor anterior después de ejecutar el comando. Lo logré para los comandos comunes que uso agregando funciones similares a las siguientes a mi perfil de PowerShell.
function cmd_special()
{
$orig_master = $env:app_master
$env:app_master = 'http://host.example.com'
mycmd $args
$env:app_master = $orig_master
}
También lo mycmd
es algún ejecutable que opera de manera diferente dependiendo del valor de la variable de entornoapp_master
. Al definir cmd_special
, ahora puedo ejecutar cmd_special
desde la línea de comando (incluidos otros parámetros) con la app_master
variable de entorno configurada ... y se restablece (o incluso se desarma) después de la ejecución del comando.
Presumiblemente, también podría hacer esto ad-hoc para una única invocación.
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
Realmente debería ser más fácil que esto, pero aparentemente este no es un caso de uso que sea compatible con PowerShell. Quizás una versión futura (o función de terceros) facilite este caso de uso. Sería bueno si PowerShell tuviera un cmdlet que hiciera esto, por ejemplo:
with-env app_master='http://host.example.com' mycmd
Quizás un gurú de PowerShell pueda sugerir cómo se podría escribir tal cmdlet.