Flash info

Maître Yoda utilise PowerShell. Cette source encore non confirmée par Obi-Wan Kenobi aurait pour origine une conférence sur la force obscure de CMD. Que le POWERshell soit avec vous...

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
T800
Utilisateur

PowerShelleur Débutant
Messages: 6
graphgraph
Karma: 0  
Creation fichier excel avec tache planifier - 19/02/19 17:35 Hello,
Bien que cela face un moment que je développe en powershell je me trouve face un truc tout simple et évident .... mais qui ne fonctionne pas.
Pour résumer de façon très simple.
Je créer un fichier excel avec un graphique avec cette méthode.

Code:

  $excel = new-object -comobject Excel.Application $workbook $excel.Workbooks.Add() $excel.visible $true $excel.DisplayAlerts $False $workbook $workbook.Worksheets.Item(1)


La suite et classique pour remplir le tableau mais pour le moment ce n'est pas important je pense.

En tous cas quand je lance avec mon compte, ou avec celuis prévu pour cela fonctionne et j'ai un beau excel avec un beau graphique dont les commande ne sont pas ici.
Par contre. Si je lance avec les même comptes ça plante.
On dirait que à ça plante a la première ou a la deuxième ligne.

message d'erreur:
exception calling add with "0" argument(s) microsoft excel cannot open or save anymore documents because there is not enough available memory or disk space

ensuite ca me dit comment faire de la place et ou.

"to make more memory available close workbooks or programs you no longer need"
et
"to free disk space delete files you no longer need from the disk you are saving to puis mon chemin de script."


Meme sur le net , je n'ai trouvé que 2 dossier desktop a ajouter mais ca ne suffit pas.

Une idée ?
PS je rappelle que en console ça fonctionne.

Message édité par: T800, à: 19/02/19 17:38

Message édité par: Arnaud, à: 20/02/19 09:46
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1317
graphgraph
Karma: 45  
Re:Creation fichier excel avec tache planifier - 20/02/19 09:49 Hello T800 !

Est-ce que ton problème ne surviendrait pas parce que tu as trop d'instances d'Excel de démarrées simultanément ?

En effet, à chaque fois que tu fais un New-Object c'est comme si tu lançais Excel et comme tu ne tues jamais ton processus (sauf si tu fermes ta console PowerShell) ça peut potentiellement bien charger ta mémoire.

Que veux-tu dire par "en console ça fonctionne." ?

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
T800
Utilisateur

PowerShelleur Débutant
Messages: 6
graphgraph
Karma: 0  
Re:Creation fichier excel avec tache planifier - 20/02/19 11:10 Hello
Je voulais aussi préciser que c'est ici que j'ai commencer le powershell sous le pseudo sonic31 début 2008 ... quand je relis mon script de l’époque je pense pouvoir le réduire ... disons diviser par 10 au moins.

Bref:

Je ne pense pas que ce soit un problème du nombre d'instance excel vue que je n'en lance qu'une.
Quand je dis en console cela veux dire avec l'interface powerhelle ISE ou la normale. Avec les 2 comptes cela fonctionne. Il n'y a que avec une tache planifier que j'ai ce message d'erreur et le plantage. La solution trouvé sur le net (ajouter les 2 répertoire desktop) ne fonctionne pas pour tout le monde comme j'ai pu le lire et j'en fait partie. Par contre je serait bien étonné que personne n'y arrive tellement ça me parait une chose souvent utiliséet utile.
Cette après midi je poste l'erreur en entière.
Peut être que je vais essayé en chargeant puis en modifiant un fichier excel qui servirait de base ? Je trouve la moins propre mais bon.
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1317
graphgraph
Karma: 45  
Re:Creation fichier excel avec tache planifier - 20/02/19 13:08 Si tu as perdu ton mot de passe pour Sonic31, je peux te le réinitialiser ?

Avec quel compte fais-tu tourner ta tâche planifiée ?

Est-ce un compte utilisateur lambda créé à cet effet ou le compte System ? Peut-être qu'on ne peut pas instancier Excel depuis le compte System ?

Pour info, il faut toujours tester ton script avec la console PowerShell classique; c'est le juge de paix. Méfie toi de ISE comme de la peste !

Je ne comprends rien à ton histoire de fichiers Desktop. Peut-être pourrais-tu être plus explicite ?

Merci

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
T800
Utilisateur

PowerShelleur Débutant
Messages: 6
graphgraph
Karma: 0  
Re:Creation fichier excel avec tache planifier - 20/02/19 14:47 Pour le compte sonic31 oui pourquoi pas mais si je ne l'ai pas fait c'est que j'ai même perdu l'adresse mail il me semble, ça fait plus de 10 ans ! Remplacer par mon mail actuel si c'est possible serait bien.

C'est 2 comptes de de l'AD, je les ais même mis admin de la machine au cas ou. J'ai tester les 2 ISE et la console classique. Cela fonctionne avec les 2 consoles et les 2 compte. Ça plante que en tache planifié.

Ca va être dur d'être clair en parlant des choses dans le même message:


$objexcel = new-object -comobject Excel.Application -verbose
VERBOSE: Verification que excel a bien été lancé contenu de $objexcel
"Microsoft.Office.Interop.Excel.ApplicationClass" from the component's primary interoperability assembly. If this type exposes different members than the IDispatch members, scripts that are written to work with this object might not work if the primary interoperability assembly is not installed.

l'erreur arrive de suite a la commande :
finalworkbook = $objexcel.worksheets.item(1)
Cela donne le résultat ci dessous:

Exception calling "Add" with "0" argument(s): "Microsoft Excel cannot open or
save any more documents because there is not enough available memory or disk
space.

• To make more memory available, close workbooks or programs you no longer
need.

• To free disk space, delete files you no longer need from the disk you are
saving to."
At D:ScriptsIISlogsReportsIISlogsreportxxxxxxxx.ps1:62 char:1
+ $finalworkbook = $objexcel.workbooks.add() # creer fichier
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation

VERBOSE: Fichier Excel créé ou pas
You cannot call a method on a null-valued expression.
At D:ScriptsIISlogsReportsIISlogsreportxxxxxxxx.ps1:64 char:1
+ $finalworksheet = $finalworkbook.worksheets.item(1) # choisir onglet
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ( [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull


La fameuse solution de dossier descktop que je trouve souvent sur le net comme par exemple sur https://social.technet.microsoft.com/forums/windowsserver/en-US/0751119d-84d5-4a77-8240- 1c4802f97375/powershell-scheduled-tasks-wont-start-excel

serait comme ils disent de créer les dossiers :

"You have to create a folder (or two on a 64bit-windows):

(32Bit, always)

C:WindowsSystem32configsystemprofileDektop

(64Bit)

C:WindowsSysWOW64configsystemprofileDesktop

I have had the same problem and this was the only solution i have found."

Ou alors j'ai mal compris , de toute façon ça ne fonctionne pas.
PS: il y a une faute a la première ligne, bien sur c'est bien desktop. Je la laisse car elle est comme ça sur plusieurs site la ou d'autre l'ont corrigé.

Pour tout résumer au plus simple.
Je veux créer un ficher excel avec un graphique (donc pas de CSV) et automatiquement avec une tache planifié. Ça fonctionne très bien en ISE ou en console classique, je le reçois tout prêt avec le graphique par mail mais jamais en tache planifier avec les même script. Apres je ne suis pas fermé sur la solution mais cela me parait tellement pratique pour d'autre cas que j'aimerai trouver la solution.

Message édité par: T800, à: 20/02/19 14:59
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1317
graphgraph
Karma: 45  
Re:Creation fichier excel avec tache planifier - 20/02/19 15:00 Ok c'est beaucoup plus clair pour moi maintenant. Merci pour ces explications.

A mon avis ton problème doit venir de la configuration de ta tâche planifiée.

Dans les versions plus anciennes de Windows, il y a avait une option qui a disparu qui était "autoriser la tâche à intéragir avec le bureau".

Ca ne s'appelle plus comme ça aujourd'hui mais je suis persuadé que cette option aurait pu résoudre ton problème.

En résumé, j'essaierai de jouer avec les différentes cases à cocher qui te sont proposées dans l'onglet Général de ta tâche planifiée.

Arnaud
PS : Au feeling j'essaierai bien celle qui s'appelle : "Do not store password. The task will only have access to local computer resources."
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
T800
Utilisateur

PowerShelleur Débutant
Messages: 6
graphgraph
Karma: 0  
Re:Creation fichier excel avec tache planifier - 21/02/19 17:28 Pour ce paramètre de la tâche planifié:
C'est ce que j'ai pensé des le départ mais non, au contraire je perd l’accès au répertoire que je mesure et le problème reste.
C'est forcément un soucis avec la tache planifier mais lequel. En dehors de ceux qui ont eu la chance d'arriver a résoudre e problème avec les fameux répertoire desktop je n'ai pas la moindre autre solution.
Je ne vois pas !! Un problème de profil dans ce cas comme je l'ai vue pour d'autre chose ? vue le message ont ne dirait t'on pas un problème de droits d’accès? mais ou ?
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1317
graphgraph
Karma: 45  
Re:Creation fichier excel avec tache planifier - 22/02/19 10:04 Hello !

De mémoire, une tâche qui peut interagir avec le bureau ne peut pas avoir accès au réseau. C'est l'un ou l'autre.

Essaie peut-être de modifier ton script dans ce sens pour tester ?

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
hichammadd
Utilisateur

PowerShelleur Amateur
Messages: 92
graphgraph
Karma: 10  
Re:Creation fichier excel avec tache planifier - 22/02/19 19:33 Slt T800, slt Arbaud,

essaie l'une de ces solutions:

1- Boutton de droite sur ton fichier ==> general ==> unblock (debloquer, c'est ou bien un boutton ou une option à cocher)

2- cmd => dcomcnfg ==> Component services >Computer >My Computer>Dcom config> selectione microsoft Excel Application
Boutton de droite ==> general ==> identité (utilise le compte que tu veux)

3- sinon jette un coup d'oeil ici

http://troyvssharepoint.blogspot.com/2012/07/stumbled-upon-interesting-one-today.html

Message édité par: hichammadd, à: 23/02/19 03:28
  | | L'administrateur a désactivé l'accés public en écriture.
T800
Utilisateur

PowerShelleur Débutant
Messages: 6
graphgraph
Karma: 0  
Re:Creation fichier excel avec tache planifier - 25/02/19 11:11 Hello tous le monde et merci pour ses réponses.

J'ai testé la solution de Arnaud sans succès. Je vais la re tester et testé les solutions de hichammadd mais justement il me semble ne pas avoir trouver "microsoft Excel Application" dans cette interface , étrange non ? Excel y est forcément puisque sans la tache planifié ça fonctionne. Je passerai voir aussi le lien.

Dans tous les cas je vous tiens au courant.
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1317
graphgraph
Karma: 45  
Re:Creation fichier excel avec tache planifier - 26/02/19 08:58 Hello !

...il me semble ne pas avoir trouver "microsoft Excel Application" dans cette interface , étrange non ?

Je me suis fait avoir une fois dans un cas assez similaire et c'était un problème de version 32 ou 64 bits d'Office. En effet, en fonction de la version 32 ou 64 bits de l'outil qui te permet de visualiser/modifier les objets DCOM, tu ne verras que les DLL de la version correspondante.

Donc vérifie bien ce point.

Par exemple, à partir d'une console PowerShell 32 bits, tu ne peux instancier un objet COM 64 bits.

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
T800
Utilisateur

PowerShelleur Débutant
Messages: 6
graphgraph
Karma: 0  
Re:Creation fichier excel avec tache planifier - 1/03/19 15:36 Hello
Merci il faudra que j'essaie ça mais il me semble avoir déjà essayé en changeant la partie de l'appel de powershell "system32" dans la tache planifiè par l'autre au nom plus étrange.

Par contre j'ai une solution qui fonctionne même si elle n'est pas aussi propre que ce que j'aurai aimé.
Code:

  Start-Transcript "D:\Scripts\IISlogsReports\logx.txt" if (test-path "D:\Scripts\IISlogsReports\fintest.xlsx")  {Remove-Item -Force "D:\Scripts\IISlogsReports\fintest.xlsx"} $objexcel = New-Object -ComObject excel.application $objexcel.visible $false $objexcel.DisplayAlerts $false # Add workbook $FilePAth "D:\Scripts\IISlogsReports" $file "D:\Scripts\IISlogsReports\xlsdetest.xlsx" $finalworkbook $objexcel.workbooks.open($file) $finalexcelrow 1 $finalworksheet $finalworkbook.worksheets.item(1$finalworkbook.worksheets.item(1).name "IIs log size" # nommer onglet $datess  get-date $finalexcelrow 1 $finalworksheet.cells.item($finalexcelrow,1)="datocol1" $finalworksheet.cells.item($finalexcelrow,2)="$datess" $ur $finalworksheet.UsedRange $null $ur.entirecolumn.autofit() Write-Verbose "END Create tab for report" -Verbose $finalWorkBook.SaveAs("D:\Scripts\IISlogsReports\fintest.xlsx") get-process -name excel Stop-Process Stop-Transcript



Pour résumer, au lieu de créer un xlsx de 0 avec powershell, j'en ouvre un existant (créé à la main avec excel) vide, pour le modifier et le sauvegarder sous un autre nom ensuite. Ça fonctionne même en tache planifié.
Donc au lieu de:
Code:

 $finalworkbook $objexcel.workbooks.add()


Cela donne:
Code:

 $finalworkbook $objexcel.workbooks.open($file)


La ou $file est le chemin du fichier excel vide existant.
Pourquoi la première solution marche pour certains et pas pour d'autre ? J'ai l'impression qu'il n'y aurai un soucis de chemin voir de chemin complet avec ou sans le nom du fichier dans le cas d'un add(). J'ai rapidement essayé en y mettant un chemin, sans résultat mais je vais re tenter. Sinon, tan pis, je garde ma solution.
Le script complet créé un fichier excel avec les données brutes et un graphique de leurs variations journalières.
  | | L'administrateur a désactivé l'accés public en écriture.
© 2019 PowerShell-Scripting.com