none
Task startet zwar Powershelscript aber dieses startet wiederum Excel nicht. RRS feed

  • Frage

  • Hallo

    Ich arbeite in einem größeren Unternehmen
    Ich habe zwei Acount's (Username) der eine ist mein persönlicher Benutzername
    der andere soll automatische Task abarbeiten (Rechnername)

    Ich möchte in Regelmäßigen abständen Informationen von SAP in eine Exceldatei schreiben.

    Ich habe einen Task angelegt der automatisch dies über den Usernamen Acount machen soll.
    (Da der Rechnernamen Acount keine Rollen und Rechte für SAP besitzt)
    Die dafür notwendigen Rechte wurden von der IT dem Username erteilt.

    mit dem Rechnername Acount kann der Task das Powershell script starten und dieses wiederum Excel
    (SAP Abfrage geht nicht mit Rechnername!)

    mit dem Usernamen Acount kann der Task nur das Powershell script starten! Excel wird nicht gestartet.

    Kann mir jemand einen Tipp geben!

    P.S. Wenn ich die Powershell script's von Hand starte, laufen diese durch ohne Probleme egal mit welchem Acount!

    Freitag, 29. November 2019 13:23

Antworten

  • Je nach der Komplexität der aus SAP extrahierten Daten, sehe ich zwei Optionen für Dich. Du könntest die Daten in eine CSV-Datei schreiben und diese entweder direkt in Excel öffnen oder sie als Datenquelle benutzen, die Excel importiert und entsprechend aufbereitet. Oder Du schaust Dir mal das Modul ImportExcel an. Das benötigt kein Office um Excel-Dateien erzeugen zu können. 

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 29. November 2019 15:18
  • Hallo,

    na dann schau Dir mal das hier an.

    Click

    Beste Gruesse
    brima

    Dienstag, 3. Dezember 2019 07:29
  • Auch das Anlegen der Verzeichnisse reicht mitunter nicht mehr.
    Ich musste da bei Office 2016 einen zusätzlichen Umweg machen:

    Starten von Excel mit einer temporären Arbeitsdatei.
    Ermitteln der Instanz per COM über die ROT (Running-Objekt-Table). Für diesen Zugriff hatte ich mir mal ein C++-Progrämmchen geschrieben.
    Excel registriert jede Instanz, jedes Workbook über die ROT.
    Man kann dann das COM-Objekt über die ROT auslesen und Excel dann automatisieren.

    https://adndevblog.typepad.com/autocad/2013/12/accessing-com-applications-from-the-running-object-table.html

    Ein Hauptproblem besteht noch im Beenden von Excel, da der Application.Quit-Aufruf nicht dazu führt, dass der Prozess sich beendet. Hierzu war dann das Ermitteln der Prozess-ID und der Aufruf von "Taskkill -f -p nnnn" erforderlich.

    Dienstag, 3. Dezember 2019 08:28

Alle Antworten

  • Dies ist von Microsoft auch nicht gewünscht.
    Für Excel (und Office im allgemeinen) gilt: Taskautomatisierung wird nicht supported.
    Set Excel 2016 habe ich da auch so meine Schwierigkeiten mit.
    Du kannst die Task aber ausführen, wenn du die Option "Nur ausführen, wenn User angemeldet ist" wählst.
    Freitag, 29. November 2019 13:41
  • Je nach der Komplexität der aus SAP extrahierten Daten, sehe ich zwei Optionen für Dich. Du könntest die Daten in eine CSV-Datei schreiben und diese entweder direkt in Excel öffnen oder sie als Datenquelle benutzen, die Excel importiert und entsprechend aufbereitet. Oder Du schaust Dir mal das Modul ImportExcel an. Das benötigt kein Office um Excel-Dateien erzeugen zu können. 

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 29. November 2019 15:18
  • Hallo,

    na dann schau Dir mal das hier an.

    Click

    Beste Gruesse
    brima

    Dienstag, 3. Dezember 2019 07:29
  • Auch das Anlegen der Verzeichnisse reicht mitunter nicht mehr.
    Ich musste da bei Office 2016 einen zusätzlichen Umweg machen:

    Starten von Excel mit einer temporären Arbeitsdatei.
    Ermitteln der Instanz per COM über die ROT (Running-Objekt-Table). Für diesen Zugriff hatte ich mir mal ein C++-Progrämmchen geschrieben.
    Excel registriert jede Instanz, jedes Workbook über die ROT.
    Man kann dann das COM-Objekt über die ROT auslesen und Excel dann automatisieren.

    https://adndevblog.typepad.com/autocad/2013/12/accessing-com-applications-from-the-running-object-table.html

    Ein Hauptproblem besteht noch im Beenden von Excel, da der Application.Quit-Aufruf nicht dazu führt, dass der Prozess sich beendet. Hierzu war dann das Ermitteln der Prozess-ID und der Aufruf von "Taskkill -f -p nnnn" erforderlich.

    Dienstag, 3. Dezember 2019 08:28
  • Hallo,

    gerade erst verg. Woche hatte ich wieder mit dem Problem zu tun. Windows Server 2019 und Office 2019, nach dem anlegen der beiden Verz. hat es funktioniert.

    Mit dem sauberen Beenden von Excel hatte ich damals auch immer mal wieder Probleme, aber nicht sauber reproduzierbar. Ich hatte viel hin her getestet, letztendlich beende ich EXCEL im Script nun auf diesem Weg und seit dem habe ich Ruhe.

    $Excel.Quit()
    Remove-Variable Excel
    [gc]::Collect()

    Beste Gruesse
    brima

    Dienstag, 3. Dezember 2019 09:27
  • Nur mal aus Neugier, warum ist denn das Modul ImportExcel eigentlich keine Alternative? Das benötigt nicht mal  ein installiertes Excel.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Dienstag, 3. Dezember 2019 10:35
  • Ganz einfach, als ich die Scripte die mit Excel arbeiten gebaut hatte gab es das Modul ImportExcel noch nicht, zudem ist auf den Systemen eh Excel vorhanden. 

    Und es gibt nicht nur EXCEL das man per PowerShell ansprechen kann, sondern z.B.: auch VISIO sehr gut geeignet zum grafischen Darstellen von GroupNesting im AD, usw.

    Beste Gruesse

    brima

    Dienstag, 3. Dezember 2019 11:58
  • Da aber von Microsoft die Automatisierung über Aufgabenplanung grundsätzlich nicht supported ist, wird man immer wieder und mit jeder neuen Version verstärkt auf Probleme dieser Art stoßen.

    Auch was das Beenden von Excel angeht, so darf (wegen COM) keine Variable mehr auf den Prozess verweisen.
    Dazu gehören ebenso noch geladene Workbooks wie Variablen mit Range und sonstigen Verweisen.
    Erst wenn alle diese Verweise aufgelöst sind, beendet sich Excel automatisch.
    Da kann schon der Aufruf eiens VBA-Makros eine Verhinderung sein, wenn dieses sich in einer globalen Variablen einen Objektverweis auf Excel-Objekte erstellt.
    Application.Quit bewirkt da im Übrigen gar nichts, diese Anweisung beendet Excel nur im Dialogaufruf.

    Dienstag, 3. Dezember 2019 16:32
  • Da aber von Microsoft die Automatisierung über Aufgabenplanung grundsätzlich nicht supported ist, ......

    Noch ein Grund mehr, für zukünftige Excel-Automatisierungsprojekte, eher auf so ein Modul zu setzen und es Fragenden (besonders Anfängern) auch zu empfehlen, als immer mehr Workarounds zu finden.  ;-)  :-D

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH-666 Dienstag, 3. Dezember 2019 22:30
    Dienstag, 3. Dezember 2019 22:30
  • Also er wollte einen Tipp für sein konkretes Problem und genau einen solchen habe ich gepostet. Und das ist fuer mich auch der Sinn dieses Forums und nicht um Leute zu bekehren. :-)

    Du hat ja das Modul empfohlen, also ist doch alles gut. Welcher Weg nun der bessere ist kann eh nur er selbst entscheiden, denn keiner von uns kennt die Situation in der Firma in der er arbeitet. Gibt es z.B.: Richtlinien die es untersagen, dass Community Module verwendet werden dürfen kann er mit dem Modul leider wenig anfangen usw. :-(

    Beste Gruesse
    brima

    Mittwoch, 4. Dezember 2019 07:56
  • Das steht ja außer Frage;-).
    Es ist ja halt nur so, dass es mit Microsoft Office immer schwieriger wird.
    Und andere Fremdprodukte als Alternative für Excel gibt es auch schon länger.
    Nur kann man da halt keine VBA-Makros verwenden, was das Leben so schön einfach machte.
    Mittwoch, 4. Dezember 2019 08:25
  • Also er wollte einen Tipp für sein konkretes Problem und genau einen solchen habe ich gepostet. Und das ist fuer mich auch der Sinn dieses Forums und nicht um Leute zu bekehren. :-)

    Das sollte gar keine Kritik sein oder so. Sorry, wenn das so angekommen ist.  ;-)

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 4. Dezember 2019 09:09