作为计划任务运行时,在PowerShell中使用Excel.Application COM对象时,无法保存Excel工作簿

我有一个问题,我已经自动创buildExcel.Application COM对象,将一些数据添加到工作簿,然后将文档保存为xlsx。

这工作正常,如果:

  • 我已经在Powershell交互式主机中,按顺序运行每个命令,或者作为ps1执行。
  • 我使用以下语法从cmd.exe运行它: powershell.exe -command“c:\ path \ to \ powershellscript.ps1”
  • 我在Windows 7 / Server 2008 R2中创build一个计划任务,使用上面的powershell.exe命令语法,并使用“仅在用户login时运行”模式。

当我修改相同的计划任务时失败 ,但将其设置为“ 运行用户是否login ”。

下面是一个示例脚本,说明我遇到的问题:

$Excel = New-Object -Com Excel.Application $Excelworkbook = $Excel.Workbooks.Add() $excelworkbook.saveas("C:\temp\test.xlsx") $excelworkbook.close() 

我有一个理论,COM对象以某种方式失败,如果我的configuration文件没有加载/如果它没有在命令窗口中执行。

创build计划任务时可以select哪些选项的创意,或创buildExcel对象时使用哪些选项或使用SaveAs()函数? 任何人都可以重现吗? 我已经能够在Server 2008 R2机器和Windows 7上看到这种行为。还没有尝试过其他平台。

你是否试图在没有login的时候运行这个? 如果是这样,我会指出你在这个微软知识库文章的一些可能的原因: 服务器端办公自动化的注意事项 。 标题说服务器端,但文章也指定这适用于客户端版本的Windows没有在加载用户configuration文件的交互式会话中运行。

如果你确实希望这个在没有用户login的情况下运行(使用你描述的选项,这听起来就像你这样做),最终我不确定你将能够解决你的问题,文章。 如果您只需要在login时运行它, 只是不要select该选项?

我被烧了,不想重写代码。 我看到你的post和其他几个让我放弃的东西。 然而,我的坚持得到了回报。 我试图让jenkins运行一个脚本来清理我们的生产环境并输出到Excel。 我不想要一个文本文件,因为我突出显示软件版本不匹配在红色,所以需要Excel。

这是对我有用的答案:

你必须创build一个文件夹(或64位Windows上的两个):

(总是64Bit)

C:\ WINDOWS \ system32 \设置\ systemprofile \ Dektop

(32位)

C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \桌面

有人提供的链接作为来源:

http://www.patton-tech.com/2012/05/printing-from-scheduled-task-as.html

我的来源是:

http://social.technet.microsoft.com/Forums/en/winserverpowershell/thread/aede572b-4c1f-4729-bc9d-899fed5fad02