我编写了一个 PowerShell 脚本,用于打开 Excel 工作簿并运行宏。当我从 PS 控制台运行该脚本,甚至使用 powershell.exe script.ps1 从命令行运行该脚本时,它都可以正常工作。当我从 Windows 任务计划程序设置任务时,它会引发有关该 Excel 文件的异常,指出该文件不存在或已在使用中。
该文件肯定存在,因为该脚本从命令行运行良好,而且我确信它没有被使用。
我尝试将 Excel 文件移动到本地非特权区域,以避免网络信任/管理员特权问题。该任务仍以最高特权运行。路径中没有空格或特殊字符。
当我尝试使用文件系统对象访问文件时,即使从调度程序运行也不会出现任何错误,所以我猜这是特定于Excel.Application.Workbooks.Open("..")
方法的。
我现在应该考虑什么?
答案1
这可能是 DCOM 权限问题。自动化 Excel 有时充满危险...
我发现解决此类问题的唯一方法是通过 DCOM 权限将 Excel 设置为以特定用户身份运行。
- 打开组件服务(开始 -> 运行,输入 dcomcnfg)
- 深入到组件服务 -> 计算机 -> 我的电脑,然后单击 DCOM 配置
- 右键单击“Microsoft Excel 应用程序”,然后选择“属性”
- 在“身份”选项卡中选择“此用户”,输入交互式用户帐户(域或本地)的 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
就我的情况来说,当我完成以下两项操作时,任务就会成功完成:
- 在任务设置中选中“以最高权限运行”
- 填写任务操作中的“开始于(可选)”字段
跟进:
虽然我的脚本正在打开 Excel 文件、运行宏、保存、关闭文件并成功完成......但外部数据并未刷新。
为了解决这个问题,我必须在 Microsoft Excel DCOM 中更改用户的身份(谢谢斯奎尔曼):
- 打开控制面板
- 管理工具
- 组件服务
- 电脑
- 我的电脑
- DCOM 配置
- Microsoft Excel 应用程序
- 特性
- 身份标签
- 选择此用户
- 输入用户名和密码
- 单击“应用”
- 好的
任务计划程序现在可以打开、更新、保存和关闭我的文件。此外,任务已成功完成。
笔记:
当我尝试在 Excel 中工作时,出现错误:“无法使用对象链接和嵌入。”并且文件无法打开。如果我返回 DCOM Excel 属性、标识并单击“启动用户”,则所有问题都会消失。