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 mycmd
gilt auch für einige ausführbare Dateien, die je nach Wert der Umgebungsvariablen unterschiedlich funktionieren app_master
. Durch Definieren cmd_special
kann ich jetzt cmd_special
über die Befehlszeile (einschließlich anderer Parameter) ausführen, wobei die app_master
Umgebungsvariable 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.