【问题标题】:How do I get powershell run from a scheduled tasks to pick up the newest environment variables如何从计划任务中运行 powershell 以获取最新的环境变量
【发布时间】:2014-08-25 11:13:11
【问题描述】:

我有一个以系统用户身份运行 powershell 脚本的计划任务。这一切都很好,除了它没有像看起来那样选择最新的环境变量的部分。

我已验证相关环境变量是“系统变量”,而不仅仅是我的用户变量。

在计划任务中,我将 PowerShell 指定为命令,并提供如下参数:

-command "& 'myscript' 'my args'"

脚本运行,但我无法导入模块,因为计划任务似乎使用的是旧环境。

“本地服务”用户可以看到更新后的变量,但系统用户看不到。

【问题讨论】:

    标签: powershell scheduled-tasks


    【解决方案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 服务器上不起作用。

    我的猜测是在调度服务启动时读取注册表值,而不是在每个任务运行时重新加载。仍然没有解释为什么本地服务帐户可以访问变量...

    作为一种解决方法,您应该能够阅读环境。直接从注册表中获取值

    【讨论】:

    • 环境变量是在我安装 pscx 时设置的。如果我可以验证它们是否在系统变量列表中,它对变量的设置方式有很大影响吗?
    • 我确实在使用 psexec 将 powershell 作为系统运行时验证了我是否获得了环境变量。但是当它作为计划任务运行时仍然看不到。
    • 你的问题是你不能使用系统用户的 pscx 吗?我已经在我的用户帐户下安装了这个模块,但是当我从系统帐户使用 get-module -listAvailable 时,找不到 pscx。我想您将不得不从系统帐户安装 pscx。或者问问@KeithHill 谁参与了那个项目
    • 当我使用psexec -i -s... 运行时,我可以看到该模块,因为它已安装并添加到psmodulepath。该问题仅在运行计划任务时出现。
    • 对不起,我不知道了
    猜你喜欢
    • 2010-10-08
    • 2016-03-20
    • 2011-03-19
    • 1970-01-01
    • 2019-05-02
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多