我有一个定义一些环境变量的脚本。我想调用外部脚本,但是它与我定义的环境变量冲突。如官方文档中所述:环境变量及其值由子会话继承。所以我的问题是:有没有一种方法可以在不继承我定义的环境变量的情况下调用外部脚本?
我通过这种方式调用外部脚本:
& { cmd /c "<path_to_scrip>\MySuperScript.cmd" } *>&1 | Write-Log
答案 0 :(得分:0)
您说您阅读了有关环境变量的文档。您阅读过scope的文档吗? 那应该为您提供所需的洞察力。 See also,当您将外壳程序打包到另一个程序时,该exe / shell便处于控制之下,它将使用它所了解的信息。
如果要创建系统环境变量,那么它们不仅对脚本可用,而且对系统可用。没有解决方法。
一种现成的方法,并且我还没有测试(因为我从来没有在用例中要求过这种方法)是利用 用户或流程环境变量 < / strong>,
$CurrentDate = Get-Date -format yyyyMMdd
[Environment]::SetEnvironmentVariable("CYCLEDATEB", $CurrentDate, "User")
$CurrentDate = Get-Date -format yyyyMMdd
[Environment]::SetEnvironmentVariable("CYCLEDATEB", $CurrentDate, "Process")
然后,它们仅适用于该用户。当然,任何其他用户的子进程都不会看到它们,但是您的逻辑和代码路径将需要重新设置以进行处理。