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

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

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

如果满足以下条件,则此方法有效:

  • 我已经在 Powershell 交互式主机中,可以按顺序运行每个命令,或者作为 ps1 执行。
  • 我从 cmd.exe 运行它,使用以下语法:powershell.exe -命令“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()

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

关于创建计划任务时应选择哪些选项,或者创建 Excel 对象或使用 SaveAs() 函数时应使用哪些选项,您有什么想法吗?有人能重现这种情况吗?我在 Server 2008 R2 计算机和 Windows 7 上都看到了这种行为。还没有尝试过其他平台。

答案1

您是否在未登录时尝试实际运行此程序?如果是这样,我会向您指出此 Microsoft KB 文章,其中有一些可能的原因:服务器端 Office 自动化的注意事项.标题说服务器端但文章还指出,这适用于未在交互式会话中运行且未加载用户配置文件的 Windows 客户端版本。

如果您确实希望在用户未登录的情况下运行此程序(使用您描述的选项,听起来您确实希望这样做),最终我不确定您是否能够解决您的问题,原因如文章中所述。如果您只需要在登录时运行它,只是不要选择该选项?

答案2

我被这个问题搞得焦头烂额,不想重写代码。我看到了你的帖子和其他几篇帖子,这让我差点放弃。然而,我的坚持得到了回报。我试图让 Jenkins 运行一个脚本来清点我们的生产环境并输出到 Excel。我不想要文本文档,因为我用红色突出显示了不匹配的软件版本,所以需要 Excel。

以下是对我有用的答案:

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

(始终为 64 位)

C:\Windows\System32\config\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

相关内容