作为计划任务运行时,Powershell脚本无法访问文件

我的Powershell(2.0)脚本具有以下代码片段:

$fileName = "c:\reports\1.xlsx" $xl = new-object -comobject excel.application $xlFormat = [Microsoft.Office.Interop.excel.XlFileFormat]::xlWorkbookDefault $xl.displayalerts = $false $workbook = $xl.workbooks.open($fileName) #Code to manipulate a worksheet $workbook.SaveAs($fileName, $xlformat) $xl.quit() $error | out-file c:\reports\error.txt 

我可以在Powershell命令提示符下运行这个脚本,没有任何问题。 电子表格被更新,并且error.txt是空的。 但是,当我在任务计划程序中将其作为任务运行时,第一行出现错误。

使用“1”参数调用“打开”的exception:“Microsoft Office Excel无法访问文件'C:\ reports \ 1.xlsx'。有以下几种可能的原因:文件名或path不存在。正在被另一个程序使用您尝试保存的工作簿与当前打开的工作簿具有相同的名称。

我使用与在Powershell命令提示符下运行脚本相同的凭据来运行该任务。 当我手动运行脚本时,它可以打开,更新和保存电子表格而不会出现问题。 当我在任务计划程序中运行它时,它不能访问电子表格。

所讨论的文件对于所有用户是可读/可写的。 我已经validation了我可以使用相同的凭据在Excel中打开文件。 如果我制作一个新的电子表格,并将其名称作为$文件名,我会得到相同的结果。 我已经validation在任务pipe理器中没有Excel.exe的实例。

奇怪的是,如果我使用get-content,我没有任何问题。 另外,如果我制作一个新的电子表格,我没有任何问题。

 $fileName = "c:\reports\1.xlsx" $xl = get-content $spreadsheet $xl = new-object -comobject excel.application $xlFormat = [Microsoft.Office.Interop.excel.XlFileFormat]::xlWorkbookDefault $xl.displayalerts = $false # Commented out $workbook = $xl.workbooks.open($fileName) $workbook = $xl.workbooks.add() #Code to manipulate a worksheet $workbook.SaveAs($fileName, $xlformat) $xl.quit() $error | out-file c:\reports\error.txt 

这工作正常。 所以Get-ChildItem可以打开没有问题的文件。 ComObject可以打开文件,如果我手动运行它,但不是如果它作为任务运行。

我不知所措 有任何想法吗?

我想你已经在Excel中遇到了一个错误:

你必须创build一个文件夹(或64位Windows上的两个):

(32Bit,总是)

C:\ WINDOWS \ system32 \设置\ systemprofile \桌面

(64位)

C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \桌面

我有同样的问题,这是我find的唯一解决scheme。

从TechNet论坛 (通过自动化时的PowerShell和Excel问题 )

上述解决scheme在我的SCSM 2012 Scorch环境中不起作用,而是使用不依赖于安装Excel或ComObject的PSExcel( https://github.com/RamblingCookieMonster/PSExcel )。