Um das Äquivalent der Unix-Syntax zu erreichen, müssen Sie nicht nur die Umgebungsvariable festlegen, sondern sie nach Ausführung des Befehls auf den vorherigen Wert zurücksetzen. Ich habe dies für allgemeine Befehle erreicht, die ich verwende, indem ich meinem PowerShell-Profil Funktionen hinzugefügt habe, die den folgenden ähnlich sind.
function cmd_special()
{
$orig_master = $env:app_master
$env:app_master = 'http://host.example.com'
mycmd $args
$env:app_master = $orig_master
}
Dies mycmdgilt auch für einige ausführbare Dateien, die je nach Wert der Umgebungsvariablen unterschiedlich funktionieren app_master. Durch Definieren cmd_specialkann ich jetzt cmd_specialüber die Befehlszeile (einschließlich anderer Parameter) ausführen, wobei die app_masterUmgebungsvariable gesetzt ist ... und sie wird nach Ausführung des Befehls zurückgesetzt (oder sogar deaktiviert).
Vermutlich können Sie dies auch ad-hoc für einen einzelnen Aufruf tun.
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
Es sollte wirklich einfacher sein, aber anscheinend ist dies kein Anwendungsfall, der von PowerShell ohne weiteres unterstützt wird. Möglicherweise erleichtert eine zukünftige Version (oder eine Funktion eines Drittanbieters) diesen Anwendungsfall. Es wäre schön, wenn PowerShell ein Cmdlet hätte, das dies tun würde, z.
with-env app_master='http://host.example.com' mycmd
Vielleicht kann ein PowerShell-Guru vorschlagen, wie man ein solches Cmdlet schreibt.