Pour obtenir l'équivalent de la syntaxe Unix, il faut non seulement définir la variable d'environnement, mais aussi la réinitialiser à sa valeur initiale après l'exécution de la commande. J'ai réalisé cela pour les commandes courantes que j'utilise en ajoutant à mon profil PowerShell des fonctions similaires à celles qui suivent.
function cmd_special()
{
$orig_master = $env:app_master
$env:app_master = 'http://host.example.com'
mycmd $args
$env:app_master = $orig_master
}
Donc mycmd
est un exécutable qui fonctionne différemment en fonction de la valeur de la variable d'environnement app_master
. En définissant cmd_special
Je peux maintenant exécuter cmd_special
à partir de la ligne de commande (y compris les autres paramètres) avec l'option app_master
et elle est réinitialisée (ou même désactivée) après l'exécution de la commande.
On peut supposer qu'il est également possible de le faire de manière ad hoc pour une invocation unique.
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
Cela devrait être plus simple que cela, mais apparemment ce n'est pas un cas d'utilisation qui est facilement pris en charge par PowerShell. Peut-être qu'une future version (ou une fonction tierce) facilitera ce cas d'utilisation. Il serait intéressant que PowerShell dispose d'une cmdlet permettant de réaliser cette opération, par exemple :
with-env app_master='http://host.example.com' mycmd
Peut-être qu'un gourou de PowerShell peut nous suggérer comment écrire une telle cmdlet.