我有一个脚本,该脚本检查文件夹中是否有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
}
您不能new-object -comobject excel.application
从计划任务中使用COM Automation Excel库(),除非该任务在当前登录用户的窗口站(会话)中运行。
也就是说,为了使用计划任务中的COM Excel库,您必须Run only when user is logged on
为它选择一个可能不希望使用的选项,这有两个原因:
它限制了您的任务仅在碰巧有人登录时才运行。
当前登录的用户将在任务运行时看到它的窗口-除非您采取其他措施将其隐藏(powershell.exe
本身无法完成)。
注意:目前有一个有效的解决方法,但是不支持该解决方法,这就是为什么最好避免这种情况的原因-请参阅有关superuser.com相关问题的答案。
因此,请考虑没有此限制的替代方法,例如DocumentFormat.OpenXml Nuget package。
请参阅此Microsoft支持文章以获取背景信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句