3 votes

Lorsqu'il est exécuté comme une tâche planifiée, il est impossible d'enregistrer un classeur Excel en utilisant l'objet COM Excel.Application dans PowerShell.

J'ai un problème où j'ai automatisé la création d'un objet COM Excel.Application, ajouté des données dans un classeur, puis enregistré le document au format xlsx.

Cela fonctionne bien si :

  • Je suis déjà dans l'hôte interactif de Powershell et je lance chaque commande en séquence, ou je l'exécute comme un ps1.
  • Je l'exécute depuis cmd.exe, en utilisant la syntaxe : powershell.exe -command "c : \path\to\powershellscript.ps1 "
  • Je crée une tâche planifiée dans Windows 7 / Server 2008 R2, j'utilise le fichier powershell.exe -syntaxe de la commande, et utiliser le mode "Exécuter uniquement lorsque l'utilisateur est connecté".

Il échoue lorsque je modifie la même tâche programmée, mais en la fixant à " s'exécute que l'utilisateur soit connecté ou non ".

Voici un exemple de script qui illustre le problème que je rencontre :

$Excel = New-Object -Com Excel.Application
$Excelworkbook = $Excel.Workbooks.Add()
$excelworkbook.saveas("C:\temp\test.xlsx")
$excelworkbook.close()

J'ai une théorie selon laquelle l'objet COM échoue d'une manière ou d'une autre si mon profil n'est pas chargé / s'il n'est pas exécuté dans une fenêtre de commande.

Avez-vous des idées sur les options à choisir lors de la création de la tâche planifiée, ou sur les options à utiliser lors de la création de l'objet Excel ou de l'utilisation de la fonction SaveAs() ? Quelqu'un peut-il reproduire ce problème ? J'ai pu observer ce comportement sur une machine Server 2008 R2 et sur Windows 7. Je n'ai pas essayé d'autres plateformes.

0 votes

Did you solve your problem ? <br>J'ai le même problème ici avec VBS, et c'est vraiment ennuyeux.... La manipulation du classeur Excel fonctionne très bien mais l'enregistrement échoue !

8voto

JoeB Points 191

J'ai été échaudé par cela et je ne voulais pas réécrire le code. J'ai vu votre message et plusieurs autres, ce qui m'a incité à abandonner. Cependant, ma persévérance a porté ses fruits. J'essayais de faire exécuter par Jenkins un script pour inventorier notre environnement de production et le sortir sur Excel. Je ne voulais pas d'un document texte parce que je mettais en évidence les versions de logiciels qui ne correspondaient pas en ROUGE, donc j'avais besoin d'Excel.

Voici la réponse qui a fonctionné pour moi :

Vous devez créer un dossier (ou deux sur un Windows 64bit) :

(64Bit, toujours)

C:\Windows\System32\config\systemprofile\Dektop

(32Bit)

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

Lien que quelqu'un a fourni comme source :

http://www.patton-tech.com/2012/05/printing-from-scheduled-task-as.html

Ma source était :

http://social.technet.microsoft.com/Forums/en/winserverpowershell/thread/aede572b-4c1f-4729-bc9d-899fed5fad02

0 votes

La solution proposée par SiteMonger a fonctionné. Au cas où quelqu'un serait aussi confus que moi, il suffit de créer le dossier ci-dessous et de ne rien faire d'autre... et mes fichiers Excel sont générés par mon application de planification des tâches ! (32Bit) C:\Windows\System32\config\systemprofile\Desktop (64Bit) C:\Windows\SysWOW64\config\systemprofile\Desktop

0 votes

Il y a une faute de frappe ci-dessus pour 32-bit. Dektop. Devrait être Desktop.

3voto

Ben Pilbrow Points 11995

Essayez-vous de l'exécuter lorsque vous n'êtes pas connecté ? Si c'est le cas, je vous conseille de consulter l'article de Microsoft KB pour connaître les causes probables : Considérations sur l'automatisation d'Office côté serveur . Le titre dit côté serveur mais l'article précise également que cela s'applique aux versions clientes de Windows qui ne s'exécutent pas dans la session interactive avec un profil utilisateur chargé.

Si vous voulez que le programme s'exécute sans qu'un utilisateur soit connecté (avec l'option que vous décrivez, il semble que ce soit le cas), je ne suis pas sûr que vous puissiez résoudre votre problème pour les raisons décrites dans l'article. Si vous avez seulement besoin qu'il s'exécute lorsque vous êtes connecté, ne choisissent pas cette option ?

0 votes

Je vais lire cet article. A première vue, il ne devrait pas s'appliquer car il parle de code de service webapp ou Win, ou de tâches planifiées s'exécutant en tant que SYSTEM, etc. J'essaie de l'exécuter en tant que (mon) compte de domaine... De plus, mon espoir est de l'exécuter en tant que compte de service sans avoir besoin de se connecter, mais mes tests initiaux l'exécutent en tant que mon compte avec cette option, alors que je suis connecté. Donc, même si je suis interactif sur la boîte, avec cette option, il échoue.

0 votes

@riknik - Il s'applique à cualquier une sorte de bureautique sans profil d'utilisateur chargé. Office s'attend à ce que certaines choses existent, et toutes ne sont pas chargées lorsqu'elles sont exécutées comme une tâche planifiée, qu'il s'agisse de votre compte ou du compte SYSTEM.

0 votes

Il semble que tu aies probablement raison. Cependant, il semble aussi que cette méthode fonctionnait sur une ancienne version de Windows/Excel, d'après ce post de 2006 de scripting guys : blogs.technet.com/b/heyscriptingguy/archive/2006/05/18/ ... Je vais garder la question ouverte pendant un certain temps pour voir si quelqu'un a une solution de rechange. Si ce n'est pas possible, cela impliquera la réécriture d'une grande partie du code ; la solution finale sera beaucoup plus propre, mais demandera beaucoup de travail. Merci pour votre aide.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X