我有一个PowerShell脚本,用于检查某个目录是否在PATH上(通过查看$ env:path)。看起来$ env:path在启动时被每个应用程序加载并本地作用域,并且该作用域被传递给任何子应用程序。所以...如果有人打开Firefox,下载我的程序,运行它,得到一条消息,他们应该改变路径,修复问题,然后再从Firefox下载窗口运行程序,他们会得到相同的消息,除非他们从资源管理器启动我的程序或重新启动Firefox。
有没有办法在我的PowerShell脚本中重新加载$ env:path,这样它就会获得当前值,就好像它是从资源管理器中打开的一样?
答案 0 :(得分:7)
如果您在浏览器的上下文之外运行,我会告诉您使用
[System.Environment]::SetEnvironmentVariable(string name, string value, EnvironmentVariableTarget target)
更改用户的Path变量。第三个参数允许您指定Process,User或Machine。如果您指定用户或计算机,则更改是永久性的,并且将显示在之后启动的所有程序的env块中。但是,由于您在浏览器中运行,我认为您无法做到这一点。
如果用户更改了其路径,则该更改将可用于将来的浏览器实例。另一种选择是在路径中测试(Get-Command
)您需要的应用程序,如果找不到,请在每次运行时自己修改$env:Path
。也就是说,除非你不知道路径应该是什么。