【问题标题】:Excel macros run through powershell but not when run by windows task schedulerExcel 宏通过 powershell 运行,但在 Windows 任务计划程序运行时不运行
【发布时间】:2020-05-19 06:54:29
【问题描述】:

我有一个脚本可以检查文件夹中的 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
}

【问题讨论】:

标签: excel vba powershell windows-server-2012


【解决方案1】:

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

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

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

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

注意:有一种解决方法目前有效,但它不受支持,这就是为什么它是最好避免我t - 请参阅this answer 到相关的 superuser.com 问题。

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

有关背景信息,请参阅this Microsoft support article

【讨论】:

    【解决方案2】:

    我试图做同样的事情。这让它对我有用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-30
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 2022-10-13
      • 2013-08-18
      • 2017-05-28
      相关资源
      最近更新 更多