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

zrz*_*zrz 16 powershell path task-scheduler microsoft-excel

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

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

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

当我尝试使用文件系统对象访问文件时,即使从调度程序运行也没有错误,所以我猜它特定于Excel.Application.Workbooks.Open("..")方法。

我现在应该考虑什么?

小智 45

创建这两个文件夹:

32位:

C:\Windows\System32\config\systemprofile\Desktop  
Run Code Online (Sandbox Code Playgroud)

64位:

C:\Windows\SysWOW64\config\systemprofile\Desktop
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一些严重的黑魔法。我不知道什么更可怕 - Excel 在这种情况下需要这个文件夹,或者有人知道 Excel 在这种情况下需要这个文件夹。 (11认同)
  • 我只想补充一点,Microsoft 不支持以非交互方式运行任何 Office 组件,但在许多情况下可以绕过它。 (3认同)

squ*_*man 12

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

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

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

不幸的是,将其保留为交互式用户或启动不适用于任务调度程序,即使将任务设置为在具有机器管理员访问权限的帐户下运行也是如此。