我有一个计划任务,它以系统用户身份运行powershell脚本。这一切都很好,除非它看起来没有获得最新的环境变量。
我已经验证了有问题的环境变量是“系统变量”,而不仅仅是我的用户变量。
在计划任务中,我已将PowerShell指定为命令,并提供了如下参数:
-command "& 'myscript' 'my args'"
脚本运行,但我无法导入模块,因为计划任务似乎正在使用旧环境。
“本地服务”用户可以看到更新的变量,但不能看到系统用户。
答案 0 :(得分:1)
如何设置环境变量?使用setx?
您可以使用以下内容以交互方式验证变量:
在提升的命令提示符下,我使用了setx / m test testvalue
然后我使用psexec作为系统用户运行powershell:
psexec -i -s powershell.exe -noexit
在打开的PowerShell中,我可以读取变量:
PS C:\Windows\system32> $env:test
testvalue
<强>更新强>
我确认从调度程序中看不到最新的环境变量。但重启后,这是有效的。
A post on superuser建议删除所有taskeng.exe
应该足够了,但这对我的2008R2服务器无效。
我的猜测是,在计划服务启动时读取注册表值,而不是在每次任务运行时重新加载。仍然没有解释为什么本地服务帐户可以访问变量......
作为一种解决方法,您应该能够阅读环境。值直接来自注册表