stefan91
Goto Top

Passwort geschützte Excel mit Powershell öffnen

Hallo Zusammen,

ich habe folgendes Problem:
Ich habe ein Script in Powershell erstellt, dass mir eine Passwort geschützte Excel öffnet und in dieser ein Makro ausführt.

Das Script funktioniert auf meinem Rechner (Windows 10, 1909, 10.0.18363.535) einwandfrei, auf dem Server (Windows Server 2012 R2 Standard, Version 6.3.6900), auf dem es eigentlich laufen soll, bekomme ich folgende Fehlermeldungen:

Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\Admin\OpenExcelFile.ps1:4 Zeichen:1
+ $workbook = $excel.workbooks.open($file,3,0,5,$password,$password)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Ausnahme beim Festlegen von "visible": "Das COM-Objekt des Typs "Microsoft.Office.Interop.Excel.ApplicationClass" kann nicht in den Schnittstellentyp   
"Microsoft.Office.Interop.Excel._Application" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente   
für die Schnittstelle mit der IID "{000208D5-0000-0000-C000-000000000046}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Fehler beim Laden der   
Typbibliothek/DLL. (Ausnahme von HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))."  
In C:\Admin\OpenExcelFile.ps1:5 Zeichen:1
+ $excel.visible = $false
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) , SetValueInvocationException
    + FullyQualifiedErrorId : ExceptionWhenSetting
 
Ausnahme beim Aufrufen von "Run" mit 1 Argument(en):  "Das COM-Objekt des Typs "Microsoft.Office.Interop.Excel.ApplicationClass" kann nicht in den Schnittstellentyp   
"Microsoft.Office.Interop.Excel._Application" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente   
für die Schnittstelle mit der IID "{000208D5-0000-0000-C000-000000000046}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Fehler beim Laden der   
Typbibliothek/DLL. (Ausnahme von HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))."  
In C:\Admin\OpenExcelFile.ps1:6 Zeichen:1
+ $excel.run("DailyRefresh")  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) , MethodInvocationException
    + FullyQualifiedErrorId : InvalidCastException

Hier mein Script:

$excel = New-Object -ComObject Excel.Application
$file = '\\server\share\ExcelFile.xlsm'  
$password = 'xxxxxxx'  
$workbook = $excel.workbooks.open($file,3,0,5,$password,$password)
$excel.visible = $false
$excel.run("DailyRefresh")  

PS Version Server:
Name                           Value                                                                                                                                  
----                           -----                                                                                                                                  
PSVersion                      5.1.14409.1018                                                                                                                         
PSEdition                      Desktop                                                                                                                                
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                                
BuildVersion                   10.0.14409.1018                                                                                                                        
CLRVersion                     4.0.30319.42000                                                                                                                        
WSManStackVersion              3.0                                                                                                                                    
PSRemotingProtocolVersion      2.3                                                                                                                                    
SerializationVersion           1.1.0.1  

PS Version Windows 10 -Rechner:
Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
PSVersion                      5.1.18362.145                                                                                                                                                                                                                     
PSEdition                      Desktop                                                                                                                                                                                                                           
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                                                                                                                           
BuildVersion                   10.0.18362.145                                                                                                                                                                                                                    
CLRVersion                     4.0.30319.42000                                                                                                                                                                                                                   
WSManStackVersion              3.0                                                                                                                                                                                                                               
PSRemotingProtocolVersion      2.3                                                                                                                                                                                                                               
SerializationVersion           1.1.0.1     

Hat jemand eine Idee, weshalb es auf meinem Rechner funktioniert, auf dem Server jedoch nicht?

Vielen Dank im Voraus!

Content-ID: 533551

Url: https://administrator.de/contentid/533551

Ausgedruckt am: 25.11.2024 um 16:11 Uhr

emeriks
emeriks 10.01.2020 um 08:40:32 Uhr
Goto Top
Hi,
könnte es sein, dass auf dem Server gar kein Excel installiert ist?

E.
Stefan91
Stefan91 10.01.2020 um 08:44:09 Uhr
Goto Top
Hi,

selbstverständlich habe ich einen Server zur Ausführung der Aufgabe ausgewählt, auf dem MS Excel (Office 2016) installiert ist face-smile
ITvortex
ITvortex 10.01.2020 um 08:52:22 Uhr
Goto Top
Hey,

bist du sicher das der Pfad stimmt?
Hat der Benutzer unter dem du das Skript ausführst auch Rechte auf das Verzeichnis?

LG
VorteX
Stefan91
Stefan91 10.01.2020 um 08:59:26 Uhr
Goto Top
Hi,

ja, der Pfas ist korrekt. Auf meinem Rechner funktioniert es damit und ich habe das Script auf einem Share gespeichert und von dort aus auf dem Server geöffnet, somit kann ich Tippfehler ausschließen.
Zugriffsrechte sind ebenfalls vorhanden (mit meinem Domänen-User & Domänen-Admin getestet).

VG Stefan
ITvortex
ITvortex 10.01.2020 um 09:01:46 Uhr
Goto Top
Bitte gib doch mal kurz den Wert der Variablen (Passwort, file) vor Zeile 4 aus - dann weißt du ob die Variablen richtig befüllt werden.

LG
Stefan91
Stefan91 10.01.2020 um 09:11:54 Uhr
Goto Top
Die Variablen werden korrekt befüllt, Pfad und Passwort werden korrekt ausgegeben, für die Variable $excel erscheint folgende Ausgabe:

Microsoft.Office.Interop.Excel.ApplicationClass

Das sieht für mich auch normal aus...
Stefan91
Stefan91 10.01.2020 um 09:14:31 Uhr
Goto Top
Visual Studio Code gibt mir für die Variable $workbook (Zeile 4) folgenden Hinweis aus: "The variable "workbook" is defined, but never used."
Das scheint jedoch auf meinem Rechner die Funktion nicht zu beeinflussen, ich kann das Script in VS Code und in der Powersehll ausführen.
ITvortex
ITvortex 10.01.2020 um 09:19:29 Uhr
Goto Top
Zitat von @Stefan91:

Visual Studio Code gibt mir für die Variable $workbook (Zeile 4) folgenden Hinweis aus: "The variable "workbook" is defined, but never used."
Das scheint jedoch auf meinem Rechner die Funktion nicht zu beeinflussen, ich kann das Script in VS Code und in der Powersehll ausführen.

Das kann ich natürlich nicht beurteilen da ich dein Script nicht kenne (außer die paar Zeilen).
Stefan91
Stefan91 10.01.2020 um 09:25:43 Uhr
Goto Top
Das ist das komplette Script ;)
Es hat ausschließlich die Aufgabe eine Excel zu öffnen und darin ein Makro zu starten. Den Rest, bis hin zum Speichern und Schließen der Excel übernimmt das Makro.
Mein Script soll über die Aufgabenplanung jeden Morgen einmal gestartet werden. That's it! face-smile
emeriks
emeriks 10.01.2020 um 09:26:26 Uhr
Goto Top
Zitat von @Stefan91:
Visual Studio Code gibt mir für die Variable $workbook (Zeile 4) folgenden Hinweis aus: "The variable "workbook" is defined, but never used."
Das scheint jedoch auf meinem Rechner die Funktion nicht zu beeinflussen, ich kann das Script in VS Code und in der Powersehll ausführen.
Das ist ja auch kein Fehler, sondern nur eine Feststellung.

A = 1
B = 2
C = 2*A
mich interssiert nur A und C
Warum habe ich also B im Script definiert?

Nichts weiter ist damit gemeint.
142232
142232 10.01.2020 um 09:31:53 Uhr
Goto Top
Stefan91
Stefan91 10.01.2020 um 09:38:27 Uhr
Goto Top
Das habe ich auch schon überprüft und der Verdacht hat sich leider nicht bestätigt...

2020-01-10_09h35_40
142232
142232 10.01.2020 aktualisiert um 09:44:59 Uhr
Goto Top
Dann Office clean entfernen und Neuinstallation.von Office durchführen. Oder nimm ProcMOn zur Hand.
142232
142232 10.01.2020 aktualisiert um 09:49:59 Uhr
Goto Top
Beachte auch die "Bitness" von Office und der Powershell Konsole!

Für Office Automation über die Aufgabenplanung muss zusätzlich beachtet werden das ein Ordner namens "Desktop" im Profil des Users existieren muss mit dem die Aufgabe ausgeführt wird, ist das Konto z.B. SYSTEM muss der im System-Profile im Windows Ordner erstellt werden.
Stefan91
Stefan91 10.01.2020 um 10:41:39 Uhr
Goto Top
Okay, vielen Dank für die Hinweise. Ich schau mal ob ich was daraus machen kann...
Eine Neuinstallation werde ich am Wochenende durchführen, ich melde mich dann nächste Woche wieder.

Bis dahin, ein schönes Wochenende!
emeriks
emeriks 10.01.2020 um 10:57:44 Uhr
Goto Top
Zitat von @Stefan91:
Bis dahin, ein schönes Wochenende!
OK. Bis Mittwoch! face-smile
Stefan91
Stefan91 10.01.2020 um 11:00:49 Uhr
Goto Top
Ich bin da übrigens noch auf etwas interessantes gestoßen: ramblingcookiemonster.github.io/PSExcel-Intro/
Vielleicht spiele ich damit noch ein wenig herum face-smile

Hat damit evtl. jemand Erfahrung?
mayho33
mayho33 11.01.2020 um 02:02:24 Uhr
Goto Top
Hi!

In Zeile 10,11,12 der Fehlermeldung steht der Fehler:

DLL xy könnte nicht geladen werden.

Da würde ich als erstes ansetzen und schauen wo das Problem liegt.

Dann wäre der Cast (Zeile 8 und 9) zu analysieren. Oft fehlt das richtige Dot. Net-Framework.

Grüße!
Stefan91
Stefan91 14.01.2020 um 09:00:36 Uhr
Goto Top
Hallo Zusammen,

ich bin leider am Wochenende nicht dazu gekommen, das MS Office neu zu installieren.
Da mir die Zeit fehlt noch länger an einer Lösung zu arbeiten, habe ich einen Task zur Ausführung des Scripts jetzt auf einem anderen Server eingeplant, dort funktioniert es problemlos.
Vielen Dank für eure Hilfe!
VG