Pour accomplir l'équivalent de la syntaxe Unix, vous devez non seulement définir la variable d'environnement, mais vous devez la réinitialiser à sa valeur antérieure après avoir exécuté la commande. J'ai accompli cela pour les commandes courantes que j'utilise en ajoutant des fonctions similaires aux suivantes à mon profil PowerShell.
function cmd_special()
{
$orig_master = $env:app_master
$env:app_master = 'http://host.example.com'
mycmd $args
$env:app_master = $orig_master
}
Il en mycmd
va de même pour certains exécutables qui fonctionnent différemment selon 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 d'autres paramètres) avec la app_master
variable d'environnement définie ... et elle est réinitialisée (ou même non définie) après l'exécution de la commande.
Vraisemblablement, vous pouvez également effectuer cette opération ad hoc pour une seule invocation.
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
Cela devrait vraiment être plus facile que cela, mais apparemment, ce n'est pas un cas d'utilisation facilement pris en charge par PowerShell. Peut-être qu'une version future (ou une fonction tierce) facilitera ce cas d'utilisation. Ce serait bien si PowerShell avait une applet de commande qui ferait cela, par exemple:
with-env app_master='http://host.example.com' mycmd
Peut-être qu'un gourou PowerShell peut suggérer comment écrire une telle applet de commande.