2009-09-23 66 views
12

我有一个PowerShell脚本,检查某个目录是否在PATH上(通过查看$ env:路径)。看起来$ env:path是在启动时由每个应用程序加载和本地范围的,并且该范围被传递给任何子应用程序。所以......如果有人打开Firefox,下载我的程序,运行它,得到一条消息,说他们应该改变他们的路径,修复问题,然后从Firefox下载窗口再次运行程序,他们会得到相同的信息,除非他们从资源管理器启动我的程序或重启Firefox。

有没有办法在我的PowerShell脚本中重新加载$ ​​env:path,这样它会得到当前值,就像它从资源管理器打开一样?

回答

7

如果你在浏览器环境之外运行我会告诉你用

[System.Environment]::SetEnvironmentVariable(string name, string value, EnvironmentVariableTarget target) 

改变路径变量的用户。第三个参数允许您指定进程,用户或机器。如果您指定用户或计算机,则更改是永久性的,并将出现在所有后来启动的程序的env块中。但是,由于您在浏览器中运行,我认为您不能这样做。

如果用户更改他们的路径,该更改将可供未来的浏览器实例使用。另一种选择是在路径中测试(Get-Command)所需的应用程序,如果找不到,则每次运行时都要在脚本中自行修改$env:Path。也就是说,除非你不知道路径应该是什么。

+5

不,这就是我一直在寻找的。 [System.Environment] :: GetEnvironmentVariable(“PATH”,“Machine”)为我提供了路径的当前设置,无论我的脚本是从哪个应用运行的还是应用何时打开。谢谢您的帮助。 – 2009-09-23 18:03:56

+0

非常有帮助的人。我正在尝试安装mercurial的脚本,然后立即克隆一个存储库,这对我来说是个窍门。 – 2013-07-26 01:59:17