Сценарий 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.