我的 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”个参数调用“Open”时出错: “Microsoft Office Excel无法访问文件'C:\reports\1.xlsx'。有几个可能的原因: 文件名或路径不存在。 文件正在被另一个程序使用。 您正在尝试保存的工作簿与当前打开的工作簿具有相同的名称。
我使用与在Powershell命令提示符中运行脚本时相同的凭据来运行任务。当我手动运行脚本时,它可以无问题地打开、更新和保存电子表格。但在任务计划程序中运行时,它无法访问电子表格。
所涉及的文件对所有用户可读/可写。我已经验证了我可以使用相同的凭据在Excel中打开文件。如果我创建一个新电子表格并将其名称放入$filename中,我会得到相同的结果。我已验证在任务管理器中没有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可以打开文件,但如果作为任务运行则无法打开。
我不知道该怎么办了。有任何想法吗?
aws ssm send-command
运行时,此问题也会出现。 - enharmonic