要实现与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
设置了环境变量的情况下从命令行(包括其他参数) ...,并且在执行命令后将其重置(甚至取消设置)。
大概,您也可以针对单个调用临时执行此操作。
& { $orig_master = $env:appmaster; $env:app_master = 'http://host.example.com'; mycmd $args; $env:app_master = $orig_master }
它确实应该比这更容易,但是显然,这不是PowerShell易于支持的用例。也许将来的版本(或第三方功能)会简化此用例。如果PowerShell有一个可以执行此操作的cmdlet,那就太好了,例如:
with-env app_master='http://host.example.com' mycmd
也许PowerShell专家可以建议如何编写这样的cmdlet。