簡體   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