PowerShell脚本通过任务计划执行时出现New-Object 80070005权限拒绝错误
问题描述
我通过批处理文件运行PS1脚本,用于将错误输出记录到文件(直接运行无法获取有效错误信息)。该PS1脚本负责创建Excel实例、打开工作簿、运行宏(宏会刷新数据查询并生成保存多个输出文件)。
在命令行或PowerShell命令行中手动运行完全正常,但通过任务计划使用相同的用户凭据(我的网络用户名和密码)启动该批处理文件时,错误文件中出现如下权限拒绝错误:
New-Object : Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
已尝试PowerShell 5.1和7.3版本,问题均存在。排查过类似问题但未找到匹配案例,确定是权限问题但不知从何入手。
可能的原因及解决步骤
1. 任务计划会话模式问题
任务计划若选择**"不管用户是否登录都要运行"**,会在非交互式的会话0中执行,而Excel等Office COM组件依赖交互式桌面权限。
- 解决:修改任务计划设置,选择**"仅在用户登录时运行"**,同时勾选"最高权限运行"。
2. DCOM权限配置缺失
Excel的COM组件未对执行任务的用户开放必要权限,需手动配置:
- 按下
Win+R,输入dcomcnfg打开组件服务。 - 依次展开:组件服务 > 计算机 > 我的电脑 > DCOM配置。
- 找到Microsoft Excel Application(若找不到,运行
mmc comexp.msc /32打开32位组件服务查找)。 - 右键点击选择"属性",切换到"安全"选项卡:
- 在"启动和激活权限"区域,选择"自定义"后点击"编辑",添加你的用户账户,赋予"本地启动"和"本地激活"权限。
- 在"访问权限"区域,同样选择"自定义"后点击"编辑",添加你的用户账户,赋予"本地访问"权限。
- 保存配置后,重启任务计划服务或重新运行任务。
3. 桌面文件夹权限异常
任务计划执行时可能无法访问用户桌面文件夹,而Excel初始化依赖该路径:
- 检查用户目录下的
Desktop文件夹权限,确保你的用户账户拥有完全控制权限。 - 若任务在会话0运行,需手动创建
C:\Windows\System32\config\systemprofile\Desktop和C:\Windows\SysWOW64\config\systemprofile\Desktop文件夹(若不存在),并赋予执行任务的用户读写权限。
4. Office安装权限问题
确保Office是按"每台计算机"安装(而非仅针对单个用户),若为Click-to-Run版本,需确认DCOM配置中对应的组件权限已正确设置。
5. 明确PowerShell执行策略
虽然手动运行正常,但任务计划可能使用不同的执行策略,可在批处理文件中明确指定:
powershell -ExecutionPolicy Bypass -File "你的脚本路径.ps1" 2>> error.log
内容的提问来源于stack exchange,提问作者bozo88

