Pourquoi Excel ne peut-il pas ouvrir un fichier lorsqu'il est exécuté à partir du planificateur de tâches?

14

J'ai écrit un script PowerShell qui ouvre un classeur Excel et exécute une macro. Lorsque j'exécute ce script à partir de la console PS, ou même à partir de la ligne de commande à l'aide de powershell.exe script.ps1, cela fonctionne. Lorsque je configure une tâche à partir du planificateur de tâches Windows, il déclenche une exception à propos de ce fichier Excel, disant qu'il n'existe pas ou qu'il est déjà utilisé.

Le fichier existe à coup sûr, car le script s'est bien exécuté à partir de la ligne de commande, et je suis certain qu'il n'est pas utilisé.

J'ai essayé de déplacer le fichier Excel vers une zone locale et non privilégiée, pour éviter les problèmes de privilège de confiance / administrateur réseau. La tâche s'exécute toujours avec les privilèges les plus élevés. Le chemin n'a pas d'espaces ni de caractères spéciaux.

Lorsque j'essaie d'accéder au fichier à l'aide d'un objet Système de fichiers, il n'y a aucune erreur même lorsqu'il est exécuté à partir du planificateur, donc je suppose que c'est spécifique à la Excel.Application.Workbooks.Open("..")méthode.

Que dois-je considérer maintenant?

zrz
la source
1
Quel compte d'utilisateur est utilisé pour exécuter la tâche planifiée?
Massimo
J'ai utilisé le compte d'administrateur de domaine et cela semblait être le problème. L'utilisation du groupe d'administrateurs de domaine a fonctionné. Mais je devais maintenant trouver pourquoi l'autorisation d'accès DCOM a un problème avec le compte d'administrateur de domaine.
zrz
tl; dr: la solution de contournement dans la réponse d'eric est efficace , mais elle n'est pas prise en charge - consultez cet article de support Microsoft . Mieux vaut chercher des alternatives telles que le package de nuget DocumentFormat.OpenXml .
mklement0

Réponses:

8

Il s'agit probablement d'un problème d'autorisations DCOM. L'automatisation d'Excel est parfois lourde de dangers ...

Le seul moyen que j'ai trouvé autour de problèmes tels que celui-ci est de configurer Excel pour qu'il s'exécute en tant qu'utilisateur spécifique via les autorisations DCOM.

  1. Ouvrir les services de composants (Démarrer -> Exécuter, tapez dcomcnfg)
  2. Accédez aux services de composants -> Ordinateurs -> Poste de travail et cliquez sur DCOM Config
  3. Faites un clic droit sur l'application Microsoft Excel et choisissez Propriétés
  4. Dans l'onglet Identité, sélectionnez Cet utilisateur et entrez l'ID et le mot de passe d'un compte d'utilisateur interactif (domaine ou local) et cliquez sur OK

Le conserver en tant qu'utilisateur interactif ou le lancement ne fonctionne malheureusement pas avec le planificateur de tâches, même lors de la configuration de la tâche pour qu'elle s'exécute sous un compte disposant d'un accès administrateur à la machine.

squillman
la source
1
Merci d'avoir signalé dcomcnfg. J'ai dû ajouter manuellement l'application Excel dans le registre pour pouvoir la voir dans dcomcnfg, puis j'ai essayé de modifier les paramètres d'identité mais cela n'a pas fonctionné non plus. Depuis dcomcnfg, j'ai examiné l'autorisation d'accès: l'administrateur du domaine était sur la liste et avait un accès local et distant, mais il y avait un petit signe rouge (croix blanche dans un disque rouge) sur son icône. Je ne sais pas pourquoi, mais il y a un problème avec le compte d'administrateur de domaine. L'ajout du compte de groupe Administrateurs de domaine et l'exécution de la tâche à partir de ce groupe est une solution de contournement.
zrz
Microsoft ne prend pas en charge l'exécution des composants Office COM dans les sessions non interactives - voir support.microsoft.com/en-us/help/257757/… . La réponse d'eric est une solution de contournement actuellement efficace, mais elle n'est pas prise en charge.
mklement0
Cette réponse pourrait être améliorée en expliquant comment ajouter des entrées d'application Microsoft Excel lorsqu'elles sont totalement absentes de DCOM Config. Voir docs.microsoft.com/en-us/archive/blogs/… Aussi, FWIW, cela n'a pas résolu mon problème. Un processus Excel apparaît toujours dans le Gestionnaire des tâches, mais le fichier spécifié ne s'ouvre / ne s'exécute jamais.
TylerH
De même, après avoir effectué cette modification, cela m'a empêché d'exécuter ou même d'ouvrir des fichiers Excel VBA / l'éditeur VBA, provoquant des CTD chaque fois que je le tente.
TylerH
42

Créez ces deux dossiers:

32Bit:

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

64Bit:

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

Excel a besoin de ces dossiers s'il n'est pas exécuté de manière interactive. Créez les deux dossiers même si vous utilisez un système d'exploitation 64 bits.

eric
la source
3
Je veux juste ajouter que Microsoft n'approuve pas l'exécution de tout composant Office de manière non interactive, mais il est possible de le contourner dans de nombreux cas.
flindeberg
8
C'est de la magie noire sérieuse. Je ne sais pas ce qui est plus effrayant - qu'Excel avait besoin de ce dossier dans ce scénario ou que quelqu'un savait qu'Excel avait besoin de ce dossier dans ce scénario.
Rich C
1
Pour souligner le point de @ flindeberg: Cette solution de contournement est efficace , mais elle n'est pas prise en charge - consultez cet article de support Microsoft .
mklement0
La création de ces dossiers et l'attribution du contrôle total pour mon compte (qui est également le compte exécutant la tâche planifiée) depuis system32 / SysWOW64 jusqu'aux dossiers du bureau ne fonctionnaient toujours pas pour moi.
TylerH
2

Lors de la définition des autorisations DCOM, si Microsoft Excel n'apparaît pas dans dcomcnfgtrymmc comexp.msc /32

référence

cmo
la source
Cela a entraîné l'ouverture de DCOM Config pour moi et m'a demandé si je voulais enregistrer quelques entrées, mais Excel n'en faisait pas partie.
TylerH