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

Dan*_*nak 3 powershell windows-server-2008 scheduled-task microsoft-excel

我遇到了一个问题,我已经自动创建了 Excel.Application COM 对象,将一些数据添加到工作簿中,然后将文档另存为 xlsx。

这在以下情况下工作正常:

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

当我修改相同的计划任务时,它会失败,但将其设置为“无论用户是否登录都运行”。

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

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

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

关于在创建计划任务时选择哪些选项,或者在创建 Excel 对象或使用 SaveAs() 函数时使用哪些选项的任何想法?有人可以复制这个吗?我已经能够在 Server 2008 R2 机器和 Windows 7 上看到这种行为。还没有尝试过其他平台。

小智 7

我已经被这个烧焦了,不想重写代码。我看到你的帖子和其他几个让我想放弃的帖子。然而,我的坚持得到了回报。我试图让 Jenkins 运行一个脚本来清点我们的生产环境并输出到 Excel。我不想要文本文档,因为我要突出显示与 RED 不匹配的软件版本,因此需要 Excel。

这是对我有用的答案:

您必须创建一个文件夹(或在 64 位 Windows 上创建两个):

(64 位,始终)

C:\Windows\System32\config\systemprofile\Dektop

(32位)

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

链接某人提供的来源:

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