Aby uzyskać odpowiednik składni Uniksa, musisz nie tylko ustawić zmienną środowiskową, ale musisz zresetować ją do poprzedniej wartości po wykonaniu polecenia. Osiągnąłem to dla typowych poleceń, których używam, dodając funkcje podobne do poniższych do mojego profilu PowerShell.
function cmd_special()
{
$orig_master = $env:app_master
$env:app_master = 'http://host.example.com'
mycmd $args
$env:app_master = $orig_master
}
Więc mycmd
jest jakiś plik wykonywalny, który działa inaczej w zależności od wartości zmiennej środowiskowej app_master
. Definiując cmd_special
, mogę teraz wykonywać cmd_special
z wiersza poleceń (w tym inne parametry) z app_master
ustawioną zmienną środowiskową ... i zostaje zresetowana (lub nawet wyłączona) po wykonaniu polecenia.
Przypuszczalnie mógłbyś również zrobić to ad hoc dla pojedynczego wywołania.
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
To naprawdę powinno być łatwiejsze niż to, ale najwyraźniej nie jest to przypadek użycia, który jest łatwo obsługiwany przez PowerShell. Może przyszła wersja (lub funkcja innej firmy) ułatwi ten przypadek użycia. Byłoby miło, gdyby PowerShell miał cmdlet, który robiłby to, np:
with-env app_master='http://host.example.com' mycmd
Być może guru PowerShell może zasugerować, jak można napisać takie polecenie cmdlet.