Мой сценарий 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»: «Microsoft Office Excel не может получить доступ к файлу 'C: \ reports \ 1.xlsx'. Существует несколько возможных причин: Имя файла или путь не существует. Файл используется другой программой. Книга, которую вы пытаетесь сохранить, имеет то же имя, что и открытая в данный момент книга.
Я запускаю задачу с теми же учетными данными, которые использую для запуска сценария в командной строке PowerShell. Когда я запускаю скрипт вручную, он может открывать, обновлять и сохранять электронную таблицу без каких-либо проблем. Когда я запускаю его в планировщике задач, он не может получить доступ к электронной таблице.
Рассматриваемый файл доступен для чтения / записи для всех пользователей. Я подтвердил, что могу открыть файл в Excel с такими же полномочиями. Если я создам новую таблицу и укажу ее имя как $ filename, я получу те же результаты. Я убедился, что в Диспетчер задач.
Как ни странно, если я использую Get-Content, У меня нет проблем. Кроме того, если я создам новую таблицу, у меня не будет никаких проблем.
$fileName = "c:\reports\1.xlsx"
$xl = get-content $filename
$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 может открыть файл, если я запустил его вручную, но не как задачу.
Я в недоумении. Любые идеи?
Добавить -Нет профиля переключитесь на powershell.exe в запланированной задаче (отредактируйте задачу, перейдите в Действия вкладку, отредактируйте свое действие и в Добавить аргументы поле, добавить -Нет профиля в качестве первого аргумента.)
Взгляните сюда:
Вам просто нужно сделать это:
У меня это сработало! Надеюсь, поможет