从通过 Windows 任务计划程序运行的 Perl 脚本生成的进程无法访问 %PATH%



我有一个Perl脚本,它使用反引号在Windows上调用程序。当我在命令提示符下运行它时,它工作正常。当我使用 Windows 任务计划程序运行它时,它停止工作。这是在带有ActiveState Perl的Windows Server 2008 x64上。它给我一个错误,无法识别为内部或外部命令,可操作的程序或批处理文件。一旦我更改对程序的调用以指向程序的完整路径,它就会再次工作。

因此,当它在带有反引号的任务计划中运行时,它会阻止它看到窗口环境变量,特别是运行时的 %PATH% 变量。由背引号生成的外壳中可能缺少一些东西?我应该使用不同的命令来执行系统调用吗?或者是否有任务计划程序设置可以解决此问题?如果有人能提供帮助,我将不胜感激。

老实说,我的环境比这更复杂,但这就是我缩小范围的内容。我实际上有一个带有批处理文件的任务计划,该文件运行一个 php 脚本,该脚本本身运行 perl 脚本,然后运行程序。我之前没有提到的堆栈的其余部分似乎可以访问 %PATH%,因此批处理文件运行"php ..."。PHP脚本运行"Perl ..."。然后 Perl 脚本在使用反引号运行"programname"时失败。我已经剥离了批处理文件和 php 脚本,并且仅使用任务调度程序和 perl 仍然存在行为。

从perl中运行路径基本上帮助我解决了这个问题。问题不在于perl本身,而是在任务计划程序服务重新启动之前,对%PATH%变量的更改不会显示在任务计划程序中。据我所知,如果不重新启动机器,就无法重新启动任务计划程序。因此,程序路径在任务计划中运行时未显示,而是显示在命令行中。

我找到了两种解决方案。

一种是重新启动计算机。

第二种方法是确保您的任务计划设置为"无论用户是否登录都运行"(最接近该选项的命令行参数是 schtasks 的/NP 参数(出于某种原因,在该方案中运行计划可以访问当前的 %PATH% 变量。我不确定,但我认为这会破坏需要与桌面交互的脚本。

如果您具有管理访问权限,则可以定义系统范围的%PATH%。用户的%PATH%增强它。在用户帐户下在系统上运行的常规程序应该能够看到系统范围的%PATH%

我不知道您是从 GUI 还是使用 AT 计划任务,但计划作业无法访问用户环境变量可能会有所帮助。

我刚刚遇到了同样的问题,或者至少是类似的问题。 我不会告诉你我调查的血腥细节。 解决方案是UAT阻碍了。

我的 Windows 7 机器上有本地管理员权限。 我必须进入管理工具>本地安全策略>安全选项和启用用户帐户控制:在管理员批准模式下运行所有管理员。 重新启动 - 瞧。 我的脚本现在在任务计划程序中运行。

希望这有帮助

相关内容

最新更新