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 d'une ligne de commande à l'aide de script.ps1 de powershell.exe, cela fonctionne. Lorsque je configure une tâche à partir du planificateur de tâches Windows, une exception est générée à propos de ce fichier Excel, indiquant qu'il n'existe pas ou est déjà utilisé.
Le fichier existe à coup sûr, car le script est 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, afin d'éviter les problèmes de privilèges d'administrateur/de réseau. La tâche est toujours exécutée 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 pas d'erreur, même lorsqu'il est exécuté à partir du planificateur. Par conséquent, il est spécifique à la méthode Excel.Application.Workbooks.Open ("..").
Que devrais-je considérer maintenant?
Merci d'avance
C'est probablement un problème d'autorisations DCOM. Automatiser Excel est parfois périlleux ...
La seule façon pour moi de résoudre des problèmes tels que celui-ci consiste à configurer Excel pour qu'il s'exécute en tant qu'utilisateur spécifique via des autorisations DCOM.
Le conserver en tant qu'utilisateur interactif ou lors du lancement ne fonctionne malheureusement pas avec le planificateur de tâches, même lorsque vous configurez la tâche pour qu'elle s'exécute sous un compte disposant d'un accès administrateur à la machine.
Créez ces deux dossiers:
32 bits:
C:\Windows\System32\config\systemprofile\Desktop
64 bits:
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.
Lors de la définition des autorisations DCOM, si Microsoft Excel n'apparaît pas dans dcomcnfg
essayez mmc comexp.msc /32