Windows 10 中的任务计划程序无法正常运行 VBS 脚本
VBS script does not work properly from Task Scheduler in Windows 10
我有一个 windows 服务器,用于对邮政信件执行邮件合并。
外部服务器生成 xls 数据表并将它们 SFTPS 到我的 windows 服务器,连同 JSON 文件以及进一步的说明:
- 要与(docx 文件)合并的信件
- 用于发送合并信件的 PDF 的电子邮件地址。
脚本是这样工作的:
1. 持续(每 60 秒)监控 JSON 个文件的目录。 ->
2.如果有JSON文件,解析它。 ->
3. 查找与 JSON 文件相关的 XLS 文件 ->
4. 运行 VBA/ EXCEL宏将邮件合并XLS和信件成PDF ->
5. 通过电子邮件将 PDF 发送给适当的联系人 ->
6. 将 XLS 文件移动到已处理文件夹
7. 将 JSON 文件移动到 PROcessed 文件夹
如果我从命令行手动 运行 它工作得很好。但是,如果我从 Task Scheduler 运行 使用 "RUN" 或在机器重新启动或给定用户登录脚本失败时自动执行。步骤 1、2 和 3 有效。 VBA 代码/宏无法运行。
我希望这可以通过配置任务计划程序来解决。这是我当前的设置:
来自 bat 文件的脚本 运行s,消息脚本保持 CMD window 打开,解释脚本正在做什么:
cscript C:\automerge\message.vbs
cscript C:\automerge\automerge.vbs >> C:\automerge\logs.log
任务计划程序设置:
运行 仅当用户登录时
运行 具有最高权限
配置 Windows 10(也尝试使用 7 和 8)
触发器:
登录时触发 - 已启用
行动:
启动程序
细节:
"C:\AutoMerge\JSON Watch.bat"
条件:
仅当计算机使用交流电源时才开始任务
如果计算机切换到电池电源则停止
设置:
允许任务按需 运行
如果 运行ning 任务在请求时没有结束,强制它停止
任何人都可以建议我如何更改计划任务或批处理文件以使其正常工作吗?
尝试像这样执行而不是直接调用批处理文件。
32 位
Action: "%SYSTEMROOT%\system32\cmd.exe /c C:\AutoMerge\JSON Watch.bat"
或 64 位
Action: "%SYSTEMROOT%\SysWOW64\cmd.exe /c C:\AutoMerge\JSON Watch.bat"
如果是 64 位...更新您的 cscript 以执行 %SYSTEMROOT%\SysWOW64\cscript.exe
事实证明 Noodles 是对的,这是代码中的内容。
我创建了一个文件系统对象并用它来获取 File.Name。然后我将这个 File.Name(没有路径)传递给一个解析文件中 JSON 的函数。当我手动 运行 它时,它工作得很好。
JSONExists(File.Name)
为了从 Task Scheduler 中正确 运行 我必须确保它传递了包括路径在内的整个文件名。
FPath = "C:\Automerge\"
JSONExists(FPath & File.Name)
我不太清楚为什么我需要任务计划程序的整个路径,而不是当我手动 运行 时,但至少现在我有一个很好的经验法则。
我有一个 windows 服务器,用于对邮政信件执行邮件合并。 外部服务器生成 xls 数据表并将它们 SFTPS 到我的 windows 服务器,连同 JSON 文件以及进一步的说明:
- 要与(docx 文件)合并的信件
- 用于发送合并信件的 PDF 的电子邮件地址。
脚本是这样工作的: 1. 持续(每 60 秒)监控 JSON 个文件的目录。 -> 2.如果有JSON文件,解析它。 -> 3. 查找与 JSON 文件相关的 XLS 文件 -> 4. 运行 VBA/ EXCEL宏将邮件合并XLS和信件成PDF -> 5. 通过电子邮件将 PDF 发送给适当的联系人 -> 6. 将 XLS 文件移动到已处理文件夹 7. 将 JSON 文件移动到 PROcessed 文件夹
如果我从命令行手动 运行 它工作得很好。但是,如果我从 Task Scheduler 运行 使用 "RUN" 或在机器重新启动或给定用户登录脚本失败时自动执行。步骤 1、2 和 3 有效。 VBA 代码/宏无法运行。
我希望这可以通过配置任务计划程序来解决。这是我当前的设置:
来自 bat 文件的脚本 运行s,消息脚本保持 CMD window 打开,解释脚本正在做什么:
cscript C:\automerge\message.vbs
cscript C:\automerge\automerge.vbs >> C:\automerge\logs.log
任务计划程序设置: 运行 仅当用户登录时 运行 具有最高权限 配置 Windows 10(也尝试使用 7 和 8)
触发器: 登录时触发 - 已启用
行动: 启动程序 细节: "C:\AutoMerge\JSON Watch.bat"
条件: 仅当计算机使用交流电源时才开始任务 如果计算机切换到电池电源则停止
设置: 允许任务按需 运行 如果 运行ning 任务在请求时没有结束,强制它停止
任何人都可以建议我如何更改计划任务或批处理文件以使其正常工作吗?
尝试像这样执行而不是直接调用批处理文件。
32 位
Action: "%SYSTEMROOT%\system32\cmd.exe /c C:\AutoMerge\JSON Watch.bat"
或 64 位
Action: "%SYSTEMROOT%\SysWOW64\cmd.exe /c C:\AutoMerge\JSON Watch.bat"
如果是 64 位...更新您的 cscript 以执行 %SYSTEMROOT%\SysWOW64\cscript.exe
事实证明 Noodles 是对的,这是代码中的内容。
我创建了一个文件系统对象并用它来获取 File.Name。然后我将这个 File.Name(没有路径)传递给一个解析文件中 JSON 的函数。当我手动 运行 它时,它工作得很好。
JSONExists(File.Name)
为了从 Task Scheduler 中正确 运行 我必须确保它传递了包括路径在内的整个文件名。
FPath = "C:\Automerge\"
JSONExists(FPath & File.Name)
我不太清楚为什么我需要任务计划程序的整个路径,而不是当我手动 运行 时,但至少现在我有一个很好的经验法则。