Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Patch Installation via VBScript
Frage
Hallo !!
Ich habe folgendes Problem.
Es soll per Anmeldescript in einen Unternehmen mit einigen Hundert PC’S folgender Patch von Microsoft verteilt werden : Q832483_MDAC_x86.EXE (Microsoft Security Bulletin MS04-003 )
Info von Microsoft :
Die folgende Befehlszeile installiert das Sicherheitsupdate z. B. ohne Benutzereingriff und unterdrückt einen Neustart des Computers:
Q832483_MDAC_X86.EXE /C:"dahotfix.exe /q /n" /q
Englisch, <LAN> ist z. B. ENU.
Die Option /q, die für Dahotfix.exe angegeben wird, führt zu einer Installation ohne Benutzereingriff. Die Option /n unterdrückt den Neustart des Computers. Die angehängte Option /q dient dazu, auch das Popupfenster für den Endbenutzer-Lizenzvertrag (End-User License Agreement oder EULA) zu unterdrücken.
Unser Script, was bisher mit anderen patchen funktionierte sieht so aus ( Die Installtion soll silent, also ohne Benutzereingriff funktionieren ):
'Hotfixinstallation
'Name, Servicepack Mindestversion, Pfad zur Setupdatei
hotfix "KB828749",3,"\\servername\install\software\SpsHotfixes\Hotfixes\Windows2000-KB828749-x86-DEU.exe /Z /M"
hotfix "Q832483_MDAC_x86",3,"\\servername\install\software\SpsHotfixes\Hotfixes\Q832483_MDAC_X86.EXE /C:"dahotfix.exe /q /n" /q
Jedoch erscheint folgende Fehlermeldung, am Client beim abarbeiten des Anmeldescriptes :
Skript :\\servername\install$\InstallatStart.vbs
Zeile: 34 ( das ist die Zeile mit hotfix “Q832483_MDAC…….)
Zeichen : 114
Fehler : Anweisungsende erwartet
Code : 800A0401
Quelle : Kompilierungsfehler in Microsoft VBScript
Hotfixroutine vom Script :
'--------------------------------------------------------
sub Hotfix(Name,mindestSPVersion,Pfad)
on error resume next
Dim objWMIService
Dim colOperatingSystems
dim objOperatingSystem
Dim version
Dim hotfixinstalliert
Dim colQuickFixes
Dim objQuickFix
Dim errreturncode
hotfixinstalliert=false
'lese Servicepackversion aus
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
version= objOperatingSystem.ServicePackMajorVersion
Next
'lese Hotfixes aus und vergleiche ob Hotfix schon vorhanden ist
Set colQuickFixes = objWMIService.ExecQuery _
("Select * from Win32_QuickFixEngineering")
For Each objQuickFix in colQuickFixes
if objQuickFix.HotFixID = name then
hotfixinstalliert= true
end if
Next
err.clear
'falls die Betriebssystemversion >= der angegebenen ist und das Hotfix noch nicht auf dem System vorhanden, soll das Hotfix installiert werden
if version >= mindestSPVersion and hotfixinstalliert=false then
'fi.writeline ""
'fi.writeline "---" & name & ": " & Date & ": " & Time
'installiert das Programm
errreturncode=wshshell.run(pfad,1,true)
If err.number = 0 then
'logdatei 0, name & "installation wurde erfolgreich gestartet"
else
logdatei 1, "es traten Fehler beim Aufrufen der Installation für " & name & " auf: " & err.number & ", " & errreturncode
End If
End If
set objWMIService = nothing
set colOperatingSystems = nothing
set objOperatingSystem = nothing
set version = nothing
set hotfixinstalliert = nothing
set colQuickFixes = nothing
set objQuickFix = nothing
set errreturncode = nothing
end sub
Ich komme hier kein Stück weiter. Habe auch schon in diversen Foren nachgeguckt.
Würde mich über Antworten freuen
Antwort 1 von Floooooo
Schau mal diese Zeile an:
Es kommt mir so vor, als wären die Anführungszeichen falsch gesetzt (z.B. hinten nach C:)
hotfix "Q832483_MDAC_x86",3,"\\servername\install\software\SpsHotfixes\Hotfixes\Q832483_MDAC_X86.EXE /C:"dahotfix.exe /q /n" /q
Es kommt mir so vor, als wären die Anführungszeichen falsch gesetzt (z.B. hinten nach C:)
Antwort 2 von Spider81
Hallo Floooooo !!
Der Fehler muss in der Zeile sitzen. Habe auch bereits mal das Anführungszeichen nach dem C: rausgenommen. Dann läuft das Script allerdings überhaupt nicht an.
Hast Du noch eine Idee !
Der Fehler muss in der Zeile sitzen. Habe auch bereits mal das Anführungszeichen nach dem C: rausgenommen. Dann läuft das Script allerdings überhaupt nicht an.
Hast Du noch eine Idee !
Antwort 3 von Floooooo
Hast du schonmal:
bzw.
probiert?
(Je nachdem, wo das /q hingehört)?
In deiner bisherigen Zeile hast du nämlich eine ungerade Anzuahl an Gänsefüßchen, und das sollte ja nicht sein.
hotfix "Q832483_MDAC_x86",3,"\\servername\install\software\SpsHotfixes\Hotfixes\Q832483_MDAC_X86.EXE /C:"dahotfix.exe /q /n"" /q
bzw.
hotfix "Q832483_MDAC_x86",3,"\\servername\install\software\SpsHotfixes\Hotfixes\Q832483_MDAC_X86.EXE /C:"dahotfix.exe /q /n" /q"
probiert?
(Je nachdem, wo das /q hingehört)?
In deiner bisherigen Zeile hast du nämlich eine ungerade Anzuahl an Gänsefüßchen, und das sollte ja nicht sein.
Antwort 4 von Spider81
Hallo Floooooo !!
Super nett von Dir, dass Du mir helfen möchtest.
Habe beides ausprobiert. Bekomme wieder die gleiche Fehlermeldung.
Zur Info :
Diese installtionsroutine von dem Patch funktioniert folgendermassen :
Wenn man Q832483_MDAC_X86.EXE händisch aufruft, erscheint die Lizenzvereinbarung, die man bestätigen muss. Dann werden die Daten (unter anderem die Datei " dahotfix ". Das ist der Installer des Patches) entpackt und die Datei " dahotfix.exe " startet selbständig. Hier muss man mit OK bestätigen, damit ide Installation ausgeführt wird.
Also: Das ganze soll einfach silent laufen.
Vielleicht spielt mein Hotfixroutine und die Zeile 34 einfach nicht miteinander ?
Noch eine Idee
Super nett von Dir, dass Du mir helfen möchtest.
Habe beides ausprobiert. Bekomme wieder die gleiche Fehlermeldung.
Zur Info :
Diese installtionsroutine von dem Patch funktioniert folgendermassen :
Wenn man Q832483_MDAC_X86.EXE händisch aufruft, erscheint die Lizenzvereinbarung, die man bestätigen muss. Dann werden die Daten (unter anderem die Datei " dahotfix ". Das ist der Installer des Patches) entpackt und die Datei " dahotfix.exe " startet selbständig. Hier muss man mit OK bestätigen, damit ide Installation ausgeführt wird.
Also: Das ganze soll einfach silent laufen.
Vielleicht spielt mein Hotfixroutine und die Zeile 34 einfach nicht miteinander ?
Noch eine Idee
Antwort 5 von Floooooo
Hmmm.... ich versteh schon, was du willst.
Ich kann allerdings auch keinen Grund erkennen, warum es mit diesem Patch nicht so funktionieren soll.
Noch ne blöde Idee: Zeichen 114 ist genau das x von dahotfix vor dem .exe - probier doch mal, was er sagt, wenn du das .exe weglässt (also: hotfix "Q832483_MDAC_x86",3,"\\servername\install\software\SpsHotfixes\Hotfixes\Q832483_MDAC_X86.EXE /C:"dahotfix /q /n" /q )
Ich kann allerdings auch keinen Grund erkennen, warum es mit diesem Patch nicht so funktionieren soll.
Noch ne blöde Idee: Zeichen 114 ist genau das x von dahotfix vor dem .exe - probier doch mal, was er sagt, wenn du das .exe weglässt (also: hotfix "Q832483_MDAC_x86",3,"\\servername\install\software\SpsHotfixes\Hotfixes\Q832483_MDAC_X86.EXE /C:"dahotfix /q /n" /q )
Antwort 6 von Undertaker
Hi,
Ich denke, diese Variante dürfte korrekt sein:
/C: soll den nachfolgenden Befehl ausführen. Dies müßte "dahotfix.exe /q /n" sein.
Das letze /q gehört wieder zur Q832483_MDAC_X86.EXE.
Das Problem ist nun anscheinend, das VB die Anführungszeichen falsch interpretiert. Also nicht so, wie Klammen mathematisch interpretiert werden, sondern von links nach rechts.
Du mußt also ein Zeichen finden, das entweder von VB wie ein Anführungszeichen (erste und vierte Anführungszeichen) oder von Windows (zweite und dritte Anführungszeichen) so interpretiert wird.
Vielleicht gibt es auch die Möglichkeit, das zweite und dritte Anführungszeichen durch Platzhalter (#,~,@ oä.) zu ersetzen und in der weiteren Bearbeitung (beispielsweise, wenn die Zeile in einer Variablen gespeichert ist) durch Anführungszeichen zu ersetzen...
Gruß
Undertaker
Ich denke, diese Variante dürfte korrekt sein:
hotfix "Q832483_MDAC_x86",3,"\\servername\install\software\SpsHotfixes\Hotfixes\Q832483_MDAC_X86.EXE /C:"dahotfix.exe /q /n" /q"/C: soll den nachfolgenden Befehl ausführen. Dies müßte "dahotfix.exe /q /n" sein.
Das letze /q gehört wieder zur Q832483_MDAC_X86.EXE.
Das Problem ist nun anscheinend, das VB die Anführungszeichen falsch interpretiert. Also nicht so, wie Klammen mathematisch interpretiert werden, sondern von links nach rechts.
Du mußt also ein Zeichen finden, das entweder von VB wie ein Anführungszeichen (erste und vierte Anführungszeichen) oder von Windows (zweite und dritte Anführungszeichen) so interpretiert wird.
Vielleicht gibt es auch die Möglichkeit, das zweite und dritte Anführungszeichen durch Platzhalter (#,~,@ oä.) zu ersetzen und in der weiteren Bearbeitung (beispielsweise, wenn die Zeile in einer Variablen gespeichert ist) durch Anführungszeichen zu ersetzen...
Gruß
Undertaker
Antwort 7 von Spider81
Danke für Eure Hilfe !
Werde jetzt noch einiges probieren. Bei Erfolg gebe ich Euch bescheid.
Grüße
Spider81
Werde jetzt noch einiges probieren. Bei Erfolg gebe ich Euch bescheid.
Grüße
Spider81
Antwort 8 von Spider81
Mit folgendem Syntax hat es funktioniert :
hotfix "Q832483_MDAC_x86",3,"\\servername\install\software\SpsHotfixes\Hotfixes\Q832483_MDAC_X86.EXE /C:" & chr(34) & "dahotfix.exe /q /n" & chr(34) & "/q"
Grüße
Spider81
hotfix "Q832483_MDAC_x86",3,"\\servername\install\software\SpsHotfixes\Hotfixes\Q832483_MDAC_X86.EXE /C:" & chr(34) & "dahotfix.exe /q /n" & chr(34) & "/q"
Grüße
Spider81

