繁体   English   中英

Excel 宏通过 powershell 运行,但在 Windows 任务计划程序运行时不运行

[英]Excel macros run through powershell but not when run by windows task scheduler

我有一个脚本,它检查文件夹中的 excel 文件,然后如果此“阈值”大于 0,则运行来自另一个 excel 文件的宏,该宏与这些 excel 文件夹交互。

当我通过 powershell ISE 手动运行该过程时,它工作正常,但是当我使用 Windows 任务调度程序时,powershell 脚本运行但调用的 excel 宏没有运行。 任何建议为什么会这样? 此进程曾经在 windows 2008 服务器上运行良好,但迁移到 windows server 2012 并且无法正常运行

  if ($count -gt $threshold){
    $excel = new-object -comobject excel.application

    $workbook = $excel.workbooks.open("D:\TimesheetService\IS-FS - AutoTimesheetLoader v2.3 - UAT.xlsm")

    $worksheet = $workbook.worksheets.item(1)

    $excel.Run("ImportTime")

    $workbook.close($false)

    $excel.quit()
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
    Remove-Variable excel
}

不能从计划任务中使用 COM 自动化 Excel 库( new-object -comobject excel.application ),除非该任务在当前登录用户的窗口站(会话)中运行

也就是说,为了从计划任务中使用 COM Excel 库,您必须为其选择Run only when user is logged on选项,您可能不希望这样做,原因有两个:

  • 它限制您的任务仅在有人碰巧登录时运行。

  • 当前登录的用户将在任务运行时看到该任务的窗口 - 除非您采取额外的步骤来隐藏它(这无法通过powershell.exe本身完成)。

注意:有一个当前有效的解决方法,但它不受支持,这就是为什么最好避免它 - 请参阅相关 superuser.com 问题的答案

因此,请考虑没有此限制的替代方案,例如DocumentFormat.OpenXml Nuget 包

有关背景信息,请参阅此 Microsoft 支持文章

我试图做同样的事情。 这对我有用 https://www.jonashendrickx.com/2016/04/07/when-run-as-scheduled-task-excel-wont-save-with-powershell/

最后两步是我需要的。 检查以确保这些文件夹存在

在 32 位和 64 位操作系统上:

C:\\Windows\\System32\\config\\systemprofile\\Desktop

在 64 位操作系统上:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM