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?
Réponses:
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.
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.
la source
Créez ces deux dossiers:
32Bit:
64Bit:
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.
la source
Lors de la définition des autorisations DCOM, si Microsoft Excel n'apparaît pas dans
dcomcnfg
trymmc comexp.msc /32
référence
la source