Warum kann Excel eine Datei nicht öffnen, wenn sie über den Taskplaner ausgeführt wird?

14

Ich habe ein PowerShell-Skript geschrieben, das eine Excel-Arbeitsmappe öffnet und ein Makro ausführt. Wenn ich dieses Skript über die PS-Konsole oder sogar über die Befehlszeile mit Powershell.exe script.ps1 ausführe, funktioniert es einfach. Wenn ich eine Aufgabe über den Windows-Taskplaner einrichte, wird eine Ausnahme zu dieser Excel-Datei ausgelöst, die besagt, dass sie entweder nicht vorhanden ist oder bereits verwendet wird.

Die Datei ist sicher vorhanden, da das Skript über die Befehlszeile einwandfrei ausgeführt wurde und ich bin mir sicher, dass es nicht verwendet wird.

Ich habe versucht, die Excel-Datei in einen lokalen und nicht privilegierten Bereich zu verschieben, um Probleme mit der Vertrauenswürdigkeit des Netzwerks / Administratorrechten zu vermeiden. Die Aufgabe wird weiterhin mit den höchsten Berechtigungen ausgeführt. Der Pfad enthält keine Leerzeichen oder Sonderzeichen.

Wenn ich versuche, mit einem Dateisystemobjekt auf die Datei zuzugreifen, treten auch beim Ausführen über den Scheduler keine Fehler auf. Ich denke, dies ist Excel.Application.Workbooks.Open("..")methodenspezifisch.

Was soll ich jetzt beachten?

zrz
quelle
1
Mit welchem ​​Benutzerkonto wird die geplante Aufgabe ausgeführt?
Massimo
Ich habe das Domänenadministratorkonto verwendet, und es schien das Problem zu sein. Die Verwendung der Domänenadministratorgruppe hat funktioniert. Aber ich musste jetzt herausfinden, warum die DCOM-Zugriffsberechtigung ein Problem mit dem Domänenadministratorkonto hat.
zrz
tl; dr: Die Problemumgehung in der Antwort von eric ist effektiv , wird jedoch nicht unterstützt - siehe diesen Microsoft-Supportartikel . Suchen Sie besser nach Alternativen wie dem Nuget-Paket DocumentFormat.OpenXml .
mklement0

Antworten:

8

Es ist wahrscheinlich ein DCOM-Berechtigungsproblem. Die Automatisierung von Excel ist manchmal mit Gefahren verbunden ...

Die einzige Möglichkeit, die ich bei solchen Problemen gefunden habe, besteht darin, Excel so einzustellen, dass es über DCOM-Berechtigungen als bestimmter Benutzer ausgeführt wird.

  1. Öffnen Sie die Komponentendienste (Start -> Ausführen, geben Sie dcomcnfg ein.)
  2. Gehen Sie zu Komponentendienste -> Computer -> Arbeitsplatz und klicken Sie auf DCOM-Konfiguration
  3. Klicken Sie mit der rechten Maustaste auf Microsoft Excel-Anwendung und wählen Sie Eigenschaften
  4. Wählen Sie auf der Registerkarte Identität die Option Dieser Benutzer aus, geben Sie die ID und das Kennwort eines interaktiven Benutzerkontos (Domäne oder lokal) ein und klicken Sie auf OK

Das Beibehalten als interaktiver Benutzer oder beim Starten funktioniert mit dem Taskplaner leider nicht, selbst wenn die Aufgabe so eingerichtet ist, dass sie unter einem Konto ausgeführt wird, das Administratorzugriff auf den Computer hat.

Squillman
quelle
1
Vielen Dank für den Hinweis auf dcomcnfg. Ich musste die Excel-Anwendung manuell zur Registrierung hinzufügen, um sie in dcomcnfg sehen zu können. Dann habe ich versucht, die Identitätseinstellungen zu ändern, aber es hat auch nicht funktioniert. Von dcomcnfg aus habe ich mich mit der Zugriffsberechtigung befasst: Der Domänenadministrator war auf der Liste und hatte lokalen und Remotezugriff, aber über seinem Symbol befand sich ein kleines rotes Schild (weißes Kreuz auf einer roten Festplatte). Ich habe keine Ahnung warum, aber irgendwie gibt es ein Problem mit dem Domänenadministratorkonto. Das Hinzufügen des Gruppenkontos für Domänenadministratoren und das Ausführen der Aufgabe in dieser Gruppe ist eine Problemumgehung.
zrz
Microsoft unterstützt das Ausführen von Office COM-Komponenten in nicht interaktiven Sitzungen nicht - siehe support.microsoft.com/en-us/help/257757/… . Die Antwort von eric ist eine derzeit wirksame Problemumgehung, wird jedoch nicht unterstützt.
mklement0
Diese Antwort könnte verbessert werden, indem erläutert wird, wie Microsoft Excel-Anwendungseinträge hinzugefügt werden, wenn sie in DCOM Config vollständig fehlen. Siehe docs.microsoft.com/en-us/archive/blogs/… Auch FWIW, dies hat mein Problem nicht gelöst. Ein Excel-Prozess wird weiterhin im Task-Manager angezeigt, die angegebene Datei wird jedoch nie geöffnet / ausgeführt.
TylerH
Ebenso hat es mich nach dieser Änderung daran gehindert, Excel-VBA-Dateien / den VBA-Editor überhaupt auszuführen oder sogar zu öffnen, was bei jedem Versuch zu CTDs führte.
TylerH
42

Erstellen Sie diese beiden Ordner:

32Bit:

C:\Windows\System32\config\systemprofile\Desktop  

64Bit:

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

Excel benötigt diese Ordner, wenn sie nicht interaktiv ausgeführt werden. Erstellen Sie beide Ordner, auch wenn Sie ein 64-Bit-Betriebssystem verwenden.

Eric
quelle
3
Ich möchte nur hinzufügen, dass Microsoft es nicht befürwortet, eine Office-Komponente nicht interaktiv auszuführen, aber es ist in vielen Fällen möglich, dies zu umgehen.
Flindeberg
8
Dies ist eine ernsthafte schwarze Magie. Ich weiß nicht, was beängstigender ist - dass Excel diesen Ordner in diesem Szenario benötigt oder dass jemand weiß, dass Excel diesen Ordner in diesem Szenario benötigt.
Rich C
1
Um den Punkt von @ flindeberg hervorzuheben: Diese Problemumgehung ist effektiv , wird jedoch nicht unterstützt - siehe diesen Microsoft-Supportartikel .
mklement0
Das Erstellen dieser Ordner und das Zuweisen der Vollzugriffskontrolle für mein Konto (das auch das Konto ist, auf dem die geplante Aufgabe ausgeführt wird) von system32 / SysWOW64 zu den Desktop-Ordnern funktionierte für mich immer noch nicht.
TylerH
2

Wenn beim Festlegen von DCOM-Berechtigungen Microsoft Excel nicht in dcomcnfgtry angezeigt wirdmmc comexp.msc /32

Referenz

cmo
quelle
Dies führte dazu, dass DCOM Config für mich geöffnet wurde und fragte mich, ob ich einige Einträge registrieren wollte, aber Excel gehörte nicht dazu.
TylerH