【发布时间】:2020-02-19 20:53:49
【问题描述】:
我想了解一个奇怪的 Powershell 行为。
如果我设置一个永久环境变量并启动如下进程
[Environment]::SetEnvironmentVariable('FOO','BAR','User')
Start-Process notepad
这在 ISE 编辑器中按预期工作,如果我在控制台中一个接一个地键入它。但是,如果我从控制台将它作为 .\script.ps1 脚本运行,Start-Process 将忽略新的或更改的环境变量。在执行 Start-Process 之前,甚至环境变量也已正确设置。我通过添加 Sleep 并手动检查环境变量对话框对此进行了测试。如果脚本第二次运行,进程将按预期读取环境变量,因为它之前已经更改过。
为什么在这种情况下控制台的行为与 ISE 中的不同?
我已经尝试过这是否与加载到 ISE 而不是控制台中的特定程序集有关,但它没有接缝。 我也尝试以 STA 身份运行,但它也不起作用。
【问题讨论】:
-
您是否尝试点源脚本文件
powershell.exe . .\.script.ps1或设置环境变量以使用Machine目标位置? -
@Theo 使用
Machine作为目标位置有效。但是,这需要我以管理员身份运行控制台,这并不总是最佳的。是否可以说应用程序在User环境变量之前检查Machine!?但这有点超出了我的理解,这怎么会破坏剧本。我还测试了从 cmd 运行*.ps1脚本(带有User变量),但也没有运气。两者都没有使用点源(使用User变量)。我做的另一个测试是使用 PS2EXE 包装器,User或Machine都不起作用。我的脑子现在炸了。 -
在 setting 上定位
User还是Machine没有区别;无论您是否以管理员身份 开始一个新流程都会有所不同 - 请参阅我的回答,尤其是脚注。
标签: powershell