Чтобы выполнить эквивалент синтаксиса Unix, вам нужно не только установить переменную среды, но и сбросить ее до прежнего значения после выполнения команды. Я сделал это для общих команд, которые использую, добавив в свой профиль PowerShell функции, подобные приведенным ниже.
function cmd_special()
{
$orig_master = $env:app_master
$env:app_master = 'http://host.example.com'
mycmd $args
$env:app_master = $orig_master
}
Также mycmd
есть исполняемый файл, который работает по-разному в зависимости от значения переменной окружения app_master
. Определив cmd_special
, я теперь могу выполнять cmd_special
из командной строки (включая другие параметры) с установленной app_master
переменной среды ... и она сбрасывается (или даже сбрасывается) после выполнения команды.
Предположительно, вы также можете сделать это ad-hoc для одного вызова.
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
Это действительно должно быть проще, но, очевидно, это не тот вариант использования, который легко поддерживается PowerShell. Возможно, будущая версия (или сторонняя функция) облегчит этот вариант использования. Было бы неплохо, если бы в PowerShell был командлет, который бы это делал, например:
with-env app_master='http://host.example.com' mycmd
Возможно, гуру PowerShell подскажет, как написать такой командлет.