为什么从任务计划程序运行时 Excel 无法打开文件?

为什么从任务计划程序运行时 Excel 无法打开文件?

我编写了一个 PowerShell 脚本,用于打开 Excel 工作簿并运行宏。当我从 PS 控制台运行该脚本,甚至使用 powershell.exe script.ps1 从命令行运行该脚本时,它都可以正常工作。当我从 Windows 任务计划程序设置任务时,它会引发有关该 Excel 文件的异常,指出该文件不存在或已在使用中。

该文件肯定存在,因为该脚本从命令行运行良好,而且我确信它没有被使用。

我尝试将 Excel 文件移动到本地非特权区域,以避免网络信任/管理员特权问题。该任务仍以最高特权运行。路径中没有空格或特殊字符。

当我尝试使用文件系统对象访问文件时,即使从调度程序运行也不会出现任何错误,所以我猜这是特定于Excel.Application.Workbooks.Open("..")方法的。

我现在应该考虑什么?

答案1

这可能是 DCOM 权限问题。自动化 Excel 有时充满危险...

我发现解决此类问题的唯一方法是通过 DCOM 权限将 Excel 设置为以特定用户身份运行。

  1. 打开组件服务(开始 -> 运行,输入 dcomcnfg)
  2. 深入到组件服务 -> 计算机 -> 我的电脑,然后单击 DCOM 配置
  3. 右键单击“Microsoft Excel 应用程序”,然后选择“属性”
  4. 在“身份”选项卡中选择“此用户”,输入交互式用户帐户(域或本地)的 ID 和密码,然后单击“确定”

不幸的是,即使将任务设置为在具有机器管理员访问权限的帐户下运行,将其保留为交互式用户或启动也无法与任务计划程序一起使用。

答案2

创建这两个文件夹:

32位:

C:\Windows\System32\config\systemprofile\Desktop  

64位:

C:\Windows\SysWOW64\config\systemprofile\Desktop

如果 Excel 不是以交互方式运行,则需要这些文件夹。即使您使用的是 64 位操作系统,也请创建这两个文件夹。

答案3

设置 DCOM 权限时,如果 Microsoft Excel 没有出现在dcomcnfg尝试mmc comexp.msc /32

参考

答案4

就我的情况来说,当我完成以下两项操作时,任务就会成功完成:

  1. 在任务设置中选中“以最高权限运行”
  2. 填写任务操作中的“开始于(可选)”字段

跟进:

虽然我的脚本正在打开 Excel 文件、运行宏、保存、关闭文件并成功完成......但外部数据并未刷新。

为了解决这个问题,我必须在 Microsoft Excel DCOM 中更改用户的身份(谢谢斯奎尔曼):

  1. 打开控制面板
  2. 管理工具
  3. 组件服务
  4. 电脑
  5. 我的电脑
  6. DCOM 配置
  7. Microsoft Excel 应用程序
  8. 特性
  9. 身份标签
  10. 选择此用户
  11. 输入用户名和密码
  12. 单击“应用”
  13. 好的

任务计划程序现在可以打开、更新、保存和关闭我的文件。此外,任务已成功完成。

笔记:

当我尝试在 Excel 中工作时,出现错误:“无法使用对象链接和嵌入。”并且文件无法打开。如果我返回 DCOM Excel 属性、标识并单击“启动用户”,则所有问题都会消失。

相关内容