Почему Excel не может открыть файл при запуске из планировщика задач?

14

Я написал сценарий PowerShell, который открывает книгу Excel и запускает макрос. Когда я запускаю этот скрипт из консоли PS или даже из командной строки, используя powershell.exe script.ps1, он просто работает. Когда я настраиваю задачу из планировщика задач Windows, он вызывает исключение для этого файла Excel, говоря, что он либо не существует, либо уже используется.

Файл существует наверняка, так как скрипт запускался нормально из командной строки, и я уверен, что он не используется.

Я попытался переместить файл Excel в локальную и непривилегированную область, чтобы избежать проблем с доверием к сети / привилегиями администратора. Задача по-прежнему выполняется с самыми высокими привилегиями. Путь не имеет пробелов или специальных символов.

Когда я пытаюсь получить доступ к файлу с помощью объекта Файловая система, ошибок не возникает даже при запуске из планировщика, поэтому я предполагаю, что он специфичен для Excel.Application.Workbooks.Open("..")метода.

Что я должен рассмотреть сейчас?

zrz
источник
1
Какая учетная запись пользователя используется для запуска запланированной задачи?
Массимо
Я использовал учетную запись администратора домена, и это казалось проблемой. С помощью группы администраторов домена работали. Но теперь мне нужно было выяснить, почему авторизация DCOM Access связана с учетной записью администратора домена.
zrz
ТЛ; др: Обходной в ответе Клэптона является эффективным , но без поддержки - см этой статьи поддержки Microsoft . Лучше искать альтернативы, такие как пакет nuget DocumentFormat.OpenXml .
mklement0

Ответы:

8

Это, вероятно, проблема с разрешениями DCOM. Автоматизация Excel иногда сопряжена с опасностью ...

Единственный способ, с помощью которого я нашел такие проблемы, - настроить Excel на запуск в качестве определенного пользователя с разрешениями DCOM.

  1. Откройте Службы компонентов (Пуск -> Выполнить, введите dcomcnfg)
  2. Разверните узел до Службы компонентов -> Компьютеры -> Мой компьютер и нажмите Конфигурация DCOM.
  3. Щелкните правой кнопкой мыши на приложении Microsoft Excel и выберите «Свойства».
  4. На вкладке «Удостоверение» выберите «Этот пользователь», введите идентификатор и пароль интерактивной учетной записи пользователя (доменной или локальной) и нажмите «ОК».

Сохранение его в качестве интерактивного пользователя или запуска не работает с планировщиком задач, к сожалению, даже при настройке задачи для запуска под учетной записью, которая имеет доступ администратора к машине.

squillman
источник
1
Спасибо за указание на dcomcnfg. Мне пришлось вручную добавить приложение Excel в реестр, чтобы увидеть его в dcomcnfg, затем я попытался изменить настройки удостоверений, но это тоже не сработало. Из dcomcnfg я посмотрел на Access Authorization: администратор домена был в списке и имел локальный и удаленный доступ, но на его значке был маленький красный знак (белый крест на красном диске). Я понятия не имею, почему, но почему-то есть проблема с учетной записью администратора домена. Добавление учетной записи группы «Администраторы домена» и запуск задачи из этой группы - это обходной путь.
zrz
Microsoft не поддерживает запуск компонентов Office COM в неинтерактивных сеансах - см. Support.microsoft.com/en-us/help/257757/… . Ответ Эрика - эффективный в настоящее время обходной путь, но он не поддерживается.
mklement0
Этот ответ может быть улучшен путем описания того, как добавлять записи приложения Microsoft Excel, когда они полностью отсутствуют в DCOM Config. См. Docs.microsoft.com/en-us/archive/blogs/… Кроме того, FWIW, это не решило мою проблему. Процесс Excel по-прежнему отображается в диспетчере задач, но указанный файл никогда не открывается / не запускается.
TylerH
Аналогичным образом, после внесения этого изменения я не смог запустить или даже открыть файлы Excel VBA / редактор VBA, вызывая CTD при каждой попытке.
TylerH
42

Создайте эти две папки:

32Bit:

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

64Bit:

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

Excel нужны эти папки, если он не работает в интерактивном режиме. Создайте обе папки, даже если вы работаете в 64-битной ОС.

Эрик
источник
3
Я просто хочу добавить, что Microsoft не поддерживает запуск любого компонента Office неинтерактивно, но во многих случаях его можно обойти.
Флиндеберг
8
Это какая-то серьезно черная магия. Я не знаю, что страшнее - Excel нужна была эта папка в этом сценарии или кто-то знал, что Excel нужна эта папка в этом сценарии.
Рич С
1
Чтобы подчеркнуть точку зрения @ flindeberg: этот обходной путь эффективен , но он не поддерживается - см. Эту статью поддержки Microsoft .
mklement0
Создание этих папок и назначение полного доступа для моей учетной записи (которая также является учетной записью, выполняющей запланированное задание), начиная с system32 / SysWOW64 и заканчивая папками рабочего стола, у меня все еще не работало.
TylerH
2

При настройке разрешений DCOM, если Microsoft Excel не появляется при dcomcnfgпопыткеmmc comexp.msc /32

ссылка

CMO
источник
Это заставило DCOM Config открыться для меня и спросило меня, хочу ли я зарегистрировать пару записей, но Excel среди них не было.
TylerH