Сценарий Powershell не может получить доступ к файлу при запуске как запланированная задача

мой сценарий Powershell (2.0) имеет следующий фрагмент кода:

$fileName = "c:reports.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:reportserror.txt

Я могу запустить этот скрипт в командной строке PowerShell без проблем. Электронная таблица обновляется, и ошибка.txt-это пустое. Однако, когда я запускаю его как задачу в планировщике задач, я получаю ошибки с первой строкой.

исключение, вызывающее "открыть" с аргументом (аргументами) "1": "Microsoft Office Excel не может получить доступ к файлу "C:reports1 - ... файлы XLSX'. Существует несколько возможных причин: Папка имя или путь не существует. Файл используется другой программой. Книга, которую вы пытаетесь сохранить, имеет то же имя, что и открытая книга.

Я запускаю задачу с теми же учетными данными, которые я использую для запуска сценария в командной строке Powershell. Когда я запускаю скрипт вручную, он может открывать, обновлять и сохранять электронную таблицу без проблем. Когда я запускаю его в планировщике задач, он не может получить доступ к электронной таблице.

файл в вопрос чтение и запись для всех пользователей. Я проверил, что я могу открыть файл в Excel с теми же учетными данными. Если я создам новую таблицу и введу ее имя в качестве $filename, я получу те же результаты. Я проверил, что нет экземпляров Excel.exe в Диспетчере задач.

странно, если я использую get-content, у меня нет никаких проблем. Кроме того, если я сделаю новую таблицу, у меня не будет никаких проблем.

$fileName = "c:reports.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:reportserror.txt

это прекрасно работает. Таким образом, Get-ChildItem может открыть файл без проблем. ComObject может открыть файл, если я запускаю его вручную, но не если он запускается как задача.

Я в растерянности. Есть идеи?

2 ответов


Я думаю, вы попали в ошибку в Excel:

вы должны создать папку (или две на 64bit-windows):

(32 бит, всегда)

C:\Windows\System32\config\systemprofile\Desktop

(64 бит)

C:\Windows\SysWOW64\config\systemprofile\Desktop

У меня была такая же проблема, и это было единственное решение, я найдено.

с Форумы TechNet (via PowerShell и Excel проблема при автоматизации )


решения выше не работали в моей среде Scsm 2012 Scorch, вместо этого я использовал PSExcel (https://github.com/RamblingCookieMonster/PSExcel), который не зависит от установки Excel или ComObject.