Чтобы выполнить эквивалент синтаксиса 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 может подсказать, как можно написать такой командлет.