Jump to content

Batch Script für Thunderbird Installation


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

in Anlehnung an diesen Post versuche ich mich an der Verteilung von Thunderbird.

 

Ich möchte um Rücksicht bitten, das ist mein erster Versuch mit Verteilung per Bacht Script, alles andere verteile ich in der GPO per .msi, und die Administration ist hier nur "Zusatzaufgabe".

 

Testrechner erst mal ein W XP, Server WS2003 x64

 

Der Plan:

Das Script soll prüfen ob die vorgegebene Version installiert ist, falls nicht wird sie installiert. Ich möchte absichtlich keine Prüfung auf GEQ, da ich ESR Versionen verteilen will und daher zum Beispiel auf ein TB 11 auch ein TB 10 ESR bügeln muss. Also daher mit == .

Ich verwende keine Prüfung auf installierte .exe wie manchmal üblich da ich mit einer Registryprüfung weniger Schwierigkeiten bezüglich XP/W7/x86/x64 erwarte und ich ja die genaue Version prüfen möchte.

 

Der Code im Kern bisher:

REM Die Installerdatei muss so benannt sein: Thunderbird[Version].exe
set newversion=10.0.2

set wd=\\gmbu-server\Softwareverteilung$\MozillaThunderbird\
set log=\\gmbu-server\Softwareverteilung$\MozillaThunderbird\log.txt
set instversion=999

echo Thunderbird Installation wird geprueft...

pause

for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Thunderbird" /v "CurrentVersion" ^|findstr "CurrentVersion"') do set instversion=%%c
pause
if %instversion% == %newversion% echo %date% %time% - %computername% hat bereits Version %newversion% installiert. >> %log% & goto end

echo %date% %time% - %computername% startet die Thunderbird Installation...
echo %date% %time% - %computername% startet die Thunderbird Installation... >> %log%

pause

REM Format des Installers: Thunderbird[Version].exe - "Thunderbird Setup 10.0.2esr.exe"
"%wd%\Thunderbird Setup %newversion%esr.exe" -ms

REM 32bit Einstellungsdateien kopieren
if exist "%programfiles%\Mozilla Thunderbird\" copy /Y "%wd%\override.ini" "%programfiles%\Mozilla Thunderbird\"
if exist "%programfiles%\Mozilla Thunderbird\" copy /Y "%wd%\mozilla.cfg" "%programfiles%\Mozilla Thunderbird\"
if exist "%programfiles%\Mozilla Thunderbird\" copy /Y "%wd%\local-settings.js" "%programfiles%\Mozilla Thunderbird\defaults\pref"

REM 64bit Einstellungsdateien kopieren
if exist "%ProgramFiles(x86)%\Mozilla Thunderbird\" copy /Y "%wd%\override.ini" "%ProgramFiles(x86)%\Mozilla Thunderbird\"
if exist "%ProgramFiles(x86)%\Mozilla Thunderbird\" copy /Y "%wd%\mozilla.cfg" "%ProgramFiles(x86)%\Mozilla Thunderbird\"
if exist "%ProgramFiles(x86)%\Mozilla Thunderbird\" copy /Y "%wd%\local-settings.js" "%ProgramFiles(x86)%\Mozilla Thunderbird\defaults\pref"

echo %date% %time% - %computername% hat die Installation abgeschlossen...
echo %date% %time% - %computername% hat die Installation abgeschlossen... >> %log%

pause

:end

pause

endlocal

 

Leider gibts Probleme:

1) Beim Starten des Batch Scripts teilt es mir mit das UNC Pfade nicht zur Verfügung stünden und das Windows Verzeichnis als aktuelles Verzeichnis gesetzt wird. Wieso das, ist das normal? Das im Batch ausgewiesenen Log file wird bei mir nicht erzeugt, liegt das daran?

 

2) Das Script bricht nach der zweiten Pause ab. Ich weiß leider nicht wieso,das Fenster schließt sich, der Versionsvergleich liefert scheinbar einen Fehler. Mir ist sowieso nicht ganz klar wie der funktioniert, denn der String "CurrentVersion" aus der Reg liefert ja eine Zeichenfolge ( z.B. 10.0.1 (de-DE) , keine Zahl, oder?. Wie das normalerweise mit GEQ ausgewertet werden soll verstehe ich noch nicht.

 

Das positive ist erst mal - wenn ich die Versionsabfrage weglasse wird alles ordnungsgemäß installiert :-), ist aber kein Zustand, wird ja jedesmal bei Rechnerstart installiert....

 

Danke

Link zu diesem Kommentar

Du könntest mich auch direkt kontaktieren wenn du Fragen zu meinen Beiträgen hast ;) So musste ich mich hier jetzt erstmal anmelden ^^

 

Also:

1) Wie wird die Batch Datei gestartet? Sind die Netzlaufwerke (\\gmbu-server) tatsächlich gerade verbunden? Sind sie auch in dem ausführenden Kontext der Batchdatei verbunden oder wir die Batch z.B. als ein anderer Benutzer gestartet und dadurch die Serververbindung nicht aktiv? Mach mal bitte nen Screenshot oder kopiere die Batch Ausgabe hierher.

 

2) Klingt so als wenn die Registry Abfrage in der Zeile davor fehlschlägt. Diese setzt am Ende mit "set instversion=%%c" die Variable, die bei der darauffolgenden Zeile zur Überprüfung gebraucht wird. Führe die Zeile mal einzelnd in einer anderen Batch aus und schau dir die Rückmeldung an; also:

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Thunderbird" /v "CurrentVersion" |findstr "CurrentVersion"

Prüfe ob der Regpfad bei dir existiert. 64bit System? Dann natürlich in

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Thunderbird

 

Zur Funktionsweise der Zeile:

mit reg query frage ich die Registry ab, den Current Version Key. Die Rückgabe ist eine Zeile mit 3 Parts, folgendes z.B.:

CurrentVersion REG_SZ 3.0.4 (de)

Ich brauche jetzt nur die Versionsnummer ohne den Kram davor und danach. Also übergebe ich diese Zeile an eine for /f Schleife, die den String an seinen Leerzeichen zerlegt und alle Elemente dazwischen in ein Array packt (sozusagen).

So wird der String zerlegt:

CurrentVersion | REG_SZ | 3.0.4 | (de)

Ich brauche mir also nur noch das dritte Element schnappen und einer Variablen zuweise. Und das macht die Zeile,

for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Thunderbird" /v "CurrentVersion"^|findstr "CurrentVersion"') do set instversion=%%c

tokens bestimmt die angesprochenen Elemente, delims das Trennzeichen (ein Leerzeichen), nach "in" folgt in der Klammer der Befehlt, mit dessen Rückgabe for arbeiten soll, mit %%c greife ich auf das 3. Element des for Resultats zu. Und das ist nur die Versionsnummer, ohne alles davor oder danach, solange die Versionsnummer von einem Leerzeichen links und rechts eingeschlossen ist.

Got it? :)

 

So müsste es aussehen:

thunderbirdversion.png

 

Okay in der derzeitigen Form wird also jegliche Firefox Installation mit der 10.0.2 ersetzt, richtig?

Link zu diesem Kommentar

Hallo,

 

ja, hätte ich mir ja denken können das ich hier den richtigen treffe :-).

Danke :-)

 

Wir können das gerne hier im Forum machen, da haben andere eventuell auch was davon :-). Ich hatte dir übrigens via Kontaktemail noch ein paar Anmerkungen zukommen lassen, eventuell schaust du die mal durch, kann ja was brauchbares dabei sein...

 

Also ich bin etwas schlauer. Ich lasse mir das Script ja bei der Ausführung anzeigen. ( im AD die entsprechende Option "run startup script visible"). Und ich setz ein paar Pausen damit ich überhaupt sehe was passiert. Die Scriptanzeige passiert ja in einem cmd Fenster. CMD unterstützt aber keine UNC Pfade, daher funktioniert weder der Pfad mit dem Exe Aufruf noch das log.

Aber es ist doch richtig das ich das Script wenn ich es in der GPO einbinde über \\server\Softwarefreigabe$\usw adressiere ?, bei Verteilung von .msi's läuft es ja genauso.

 

Es gibt die Möglichkeit den Pfad trotzdem nutzbar zu machen, irgendwie so:

 

FOR /F "tokens=* delims=?" %%I IN ('ECHO %0') DO @SET SCRIPTPATH=%%~dpI

und dann nutzt man den Scriptpath

 

Leider bin ich nicht manns genug das korrekt umzusetzen, jedenfalls hats nicht geklappt.

 

Haben das Problem alle?? Da dürfte man sich ja nie das Script anzeigen lassen weil es dann nicht funktioniert.

 

zu1.)

das will ich meinen, ich hab ja noch mehr Scripte ( Netzlaufwerke verbinden und diverse Softwareinstallationen über GPO mit .msi files.)

Per GPO ist auch gesetzt das er auf die Netzwerkverbindung warten soll. Das Script für TB ist wirklich das letzte in der Reihe was abgearbeitet wird.

 

zu2.) Da verstehe ich bereits nicht wieso das verschiedene Variablen sind in der Zeile. Alle Beispiele die ich gesehen habe benutzen die gleiche.

Ah. Moment, lese gerade deine Hinweise... ahh..%%a würde auf den ersten Token zugreifen, und %%c greift auf den dritten token zu? Ahso.

 

Mein Vergleich derzeit:

 

for /f "tokens=3 delims=	" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Thunderbird" /v "CurrentVersion" ^|findstr "CurrentVersion"') do set instversion=%%a
:SET instversion
:SET newversion

 

Nach 2h hab ich gestern die Sache mit den tokens und delims kapiert, aber:

Ich weiß nicht wieso, aber deine for Schleife funktioniert nicht bei mir.

Wenn ich deine Abfrage verwende bekomme ich :

Die Umgebungsvariable "instversion" ist nicht definiert.

Lasse ich mir hingegen token %%a ausgeben bekomme ich:

CurrentVersion REG_SZ 3.0.4

sprich das einzige Leerzeichen ist zwischen der Version und dem (de) !!

 

Daher verwende ich derzeit:

delims=[TAB] als Trenner (!) und nur token3

Sprich meine Reg ist irgendwie: CurrentVersion[TAB]REG_SZ[TAB]10.0.2[Leerzeichen](de)

Und daher verwende ich nur token 3 denn die anderen sind sinnlos zu vergleichen.

Ich bekomme dann z.B. zurückgeliefert:

9.0 (de)

und vergleiche das mit einer entsprechend aussehenden "newversion"

 

Ich teste derzeit auf einem XP PROF SP3 Rechner. Und ich weiß das du FF verteilst, :-)) aber ja, es soll jegliche Version von TB ersetzt werden.

 

Was mich etwas irritiert ist das es früher schon mal im wesentlichen funktionierte. Jetzt geht praktisch gar nichts mehr. Ich glaube vordringlich müßte erst mal das UNC Problem geklärt werden, womöglich löst sich dann der Rest von selbst.

 

Danke

byPö

Link zu diesem Kommentar

Das mit den UNC Pfaden versteh ich immernoch nicht. Also ich kenne den Fehler und weiß grob wann er auftritt aber das dürfte in diesem Fall eigentlich nicht passieren.

Die CMD darf ihre ausführende Ebene nicht auf ein UNC Pfad (also runter von der lokalen Maschine) verschieben.

Wenn ich also in der CMD sehe:

C:\Users\Hannes>

Dann ist der ausführende Pfad C:\Users\Hannes. Dieser Pfad darf nicht im Netzwerk liegen.

Also Variablenzuweisungen á la set wd=\\server\ordner sind kein problem aber ich darf nicht das "Working Directory" (WD) dorthin verschieben mit cd /d %wd% - das sollte nicht erlaubt sein (kann ich dooferweise gerade nicht testen).

aber Zugriffe von extern z.B. via echo test >> %wd%\log.txt sind möglich.

Somit sehe ich in dem Script was du im 1. Post eingefügt hast, keinerlei Verletzungen dieser Richtlinie.

Auch die Ausführung des Scripts via GPO Startscript macht da keinen Unterschied. Ich habe die Problem bei mir ja auch weder bei Windows XP noch bei Windows 7 Rechnern im Netzwerk.

Also bitte nochmal genauer wann wo der Fehler auftritt, Screenshot, Schritt für Schritt Beschreibung.

 

Hinweis: "run startup script visible" bewirkt seit Windows Vista oder 7 nichts mehr. Dort sind Startscripts immer unsichtbar. Unter XP konnte man das noch steuern. Somit würde das Setzen von Pausen bei Win7 unweigerlich zum Script Timeout führen.

 

"CMD unterstützt aber keine UNC Pfade, daher funktioniert weder der Pfad mit dem Exe Aufruf noch das log"

Wie oben beschrieben ist die Aussage nur halb richtig. Klar kann ich mit

start \\server\ordner\programm.exe
echo gestartet >> \\server\ordner\log.txt

arbeiten, UNC Pfade dürfen nur nicht als WD gesetzt werden.

 

"bei Verteilung von .msi's läuft es ja genauso"

Verteilung von MSIs ist sowieso nen anderes Thema, die haben ja diese UNC Pfadprobleme gar nicht. Also das betrifft eh alles nur Batch.

Und bei Verteilung von MSIs über GPO -> Softwarepakete ist es sowieso nochmal ganz was anderes.

 

"Es gibt die Möglichkeit den Pfad trotzdem nutzbar zu machen, irgendwie so:"

Ich weiß nicht ganz was du damit bezwecken willst aber ich bin mir ziemlich sicher, dass du zumindest keinen UNC Pfad als WD einstellen kannst. Ich habe mehrere Workarounds beim Thema Serversicherung via Batch (auch im Blog) probiert und am Ende erkannt, dass es rein technisch einfach nicht möglich ist.

 

1.) Kannst du mal verschiedene Dinge auf diesem Netzlaufwerk tun mit einer Extra Batch und gucken was geht oder was nicht? Und mal einen neuen Ordner erstellen auf der Root Ebene von \\gmbu-server\ und dort ebenfalls was versuchen.

Also neue Batch, dann

start \\gmbu-server\neu\cmd.exe
echo test >> \\gmbu-server\neu\log.txt
set wd=\\gmbu-server\neu
echo test2 >> %wd%\log2.txt
start \\gmbu-server\Softwareverteilung$\cmd.exe
echo test >> \\gmbu-server\Softwareverteilung$\log.txt
set wd=\\gmbu-server\Softwareverteilung$
echo test2 >> %wd%\log2.txt

Sowas in der Art.

 

2.) Warum deine Batch jetzt andere Ausgaben hat als meine verstehe ich sowieso nicht. Sowohl die Batch auf Arbeit als auch zu Hause am PC als auch jetzt hier im Laptop, überall kriege ich mit folgender Befehlszeile:

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox" /v "CurrentVersion" |findstr "CurrentVersion"

(ACHTUNG: 64bit Regpfad!)

folgende Ausgabe:

    CurrentVersion    REG_SZ    9.0.1 (de)

http://www.youscreen.de/firefoxregquery.jpg

 

Achte darauf die 64bit reg query nicht mit dem normalen zu verwechseln, meine Beispiele waren alle mit 64bit gemacht. Der Unterschied ist das Wow6432Node im reg Pfad.

 

Aber solange du an die Versionsnummer kommst soll das erstmal Optimierung sein, die dann später noch geschehen kann. Erstmal muss es laufen.

Link zu diesem Kommentar

Hallo,

also ich versuche mal nachzukommen.

 

Du sagst die UNC Pfade müßten so ok sein, solange man das wd nicht dorthin legt. Deine Batch Zeile :

set wd=\\server\usw...

stellt also kein Problem dar? Hm.

 

Das man auf die VNC Pfade doch zugreifen kann habe ich von hier . Klang eigentlich gut.

 

Dann hab ich gelesen das man den Rechnern per Regeintrag die UNC Prüfung abschalten kann und das es dann geht....hm. Ist das bei euch eventuell Standard?

 

Ich beschreibe mal die Testumgebung:

WS2003 x64 SR2 mit AD. Testrechner wie gesagt ein XP SP3 und Mitglied der Domäne.

Der Rechner bekommt per GPM ein Anmeldesript, CompleteStartInformation, Energieverwaltung, RemoteDesktop, und noch ein paar Scripte, zusätzlich per .msi Reader, Flash, FF, Java, und ein WSUS ist natürlich auch mit im Spiel.

 

Was ich jetzt nochmal gemacht habe: in Notepad++ eine neue leere Datei erzeugt, die Batch reinkopiert und mit Speichern unter explizit als .bat abgelegt.

Hatte ich gelesen, daß das Umbenennen von .txt irgendwie nicht immer das Gleiche ist. Und tatsächlich, bei der Scriptabarbeitung wird mir jetzt jede Zeile des Scrips angezeigt, auch auskommentierte Zeilen. Das war vorher nicht. Beeinflußt aber nicht den UNC Effekt.

 

Was ich gemacht habe:

unter GPM-Domains-name-Softwareverteilung eine GPO Mozilla Thunderbird erstellt. Ich habe für Thunderbird derzeit keine OU, daher ist der Testrechner direkt in der GPO bei Security Filtering eingetragen.

 

Im GPOE der Richtlinie Mozilla Thunderbird:

Computerconfiguration>Windows-Einstellungen>Skripts(Start/Herunterfahren)>Starten

...habe ich die Batch eingetragen:

\\servername\Softwareverteilung$\MozillaThunderbird\thunderbird-installer.bat

 

Das wars.

 

Client gestartet, er holt sich die Richtlinien usw. und öffnet dann das Fenster mit der Thunderbird-Installer Scriptabarbeitung.

Da steht ganz oben als allererstes:

 

"\\server\laufwerk\Policies\blablabla\Scrips\Startup"

CMD.EXE wurde mit dem oben angegebenen Pfad als aktuellem Verzeichnis gestartet.

UNC-Pfade werden nicht unterstützt.

Stattdessen wird das Windows-Verzeichnis als aktuelles Verzeichnis gesetzt.

 

c:\Windows>REM __________________________________

c:\Windows> WICHTIG! Hier die aktuelle zu verteilende Version eingeben.

c:\Windows> usw. usw..........

 

Tja.

Der Versionsvergleich läuft korrekt, das Script will installieren, aber bricht ab mit "Zugriff verweigert"

Die Rechte für die Softwareverteilung hab ich schon auf JEDER hochgesetzt. wird wohl an der UNC Problematik liegen.

 

Kapier nur nicht wieso es schon mal funktionierte. Vieleicht hole ich mir am Mo mal einen anderen Testrechner her.

 

 

Wenn ich die Bat direkt auf dem Server starte läuft sie, da kommt die UNC Pfad Geschichte nicht. Aber da findet er den Regpfad natürlich nicht, weil x64 und keine TB installiert.

 

Deine Tests kann ich leider erst am Montag machen, aber natürlich bleib ich dran...

 

zu2) Ja, solange ich einfach nur so query abfrage bekomme ich die gleiche Antwort, doch die einfache query behandelt ja auch noch nicht die tokens und delims, Das macht erst die FOR Schleife, und da gelten hier scheinbar andere Separatoren. Frag mich nicht wie das sein kann.

Ich frag mich obs doch noch irgendwie am Dateiformat hängt.

 

Der x64bit Problematik und der erforderlichen Anpassung bin ich mir voll bewußt, ich hab hier auch ein paar W7 x64, aber wie gesagt, erst mal sollte es auf dem Testrechner laufen, dann auf allen Xps, dann auf den W7 x86 und erst dann kommen die x64er :-)).

 

 

Unabhängig davon - anderes Thema - ich weiß du betreust ein paar Rechner mehr - wie ist deine Meinung zu einem firmeninternen Webmailer? Ich finde da keine qualifizierten für/wieder aus Sicht von Admins und Softwarepflegern :-).

Ich finde das hat irgendwie auch was für sich....

 

byPö

Link zu diesem Kommentar

Achsooooo!!

Sag doch, dass der UNC Pfad Fehler vom Startup Pfad des Domain Controllers kommt. Das ist ja auch normal (und sollte eigentlich bei jedem sichtbaren, mit pause versehenem, Batch Script passieren).

Der Fehler ist ganz natürlich und besagt, dass jedes Startscript, was vom Domain Controller aus dem Startup Verzeichnis gestartet wird, erstmal versucht dieses Verzeichnis als sein Arbeitsverzeichnis zu definieren, schließlich wurde es von dort gestartet. Natürlich schlägt das fehl, was egal ist da kein Admin in Batches mit relativen Pfadangaben arbeiten sollte. Daher startet jede Startscript Batch mit dem Windows Verzeichnis als Arbeitsverzeichnis.

 

Also dieser Fehler soll absolut unabhängig sein von der restlichen Batch, absolut irrelevant.

 

Viel viel interessanter ist jetzt das Zugriff verweigert auf die Installation von Thunderbird. Denn hier ist dein Problem, irgendwo stimmen Rechte nicht.

Hast du den Computerkonten (bzw. dem 1 Computerkonto) die Rechte auf der Thunderbird Verzeichnis gegeben? Vermutlich nicht, deswegen schreibt er wohl auch nie in die Logdatei dieses Ordners, kein Schreibzugriff.

 

Also, überprüfe die NTFS Sicherheitsrechte des Thunderbird Ordners, dort muss das Computerkonto des Computers Schreibzugriff haben.

iqbcomputergroup.jpg

 

Achso und was Webmailer angeht, leider keine Ahnung. Wir kriegen 2 Webmailer vom Rechenzentrum gestellt, SquirrelMail (alt) und Roundcube (neu) aber da ich sowieso nur Google Mail nutze, auch für Arbeitsmails, ist mir das wurscht. Aber auch meine Uni nutzt Roundcube, das ist also schon etwas weiter verbreitet wies aussieht.

bearbeitet von Hannes Schurig
Webmailer Ergänzung
Link zu diesem Kommentar

So da bin ich wieder.

 

ok, Rechte:

 

Das Log Problem ist gelöst. Die Freigabe von Softwareverteilung$ hatte nur Leserechte da ich bisher nur .msi verteilte und dort keine Logs hatte. Die Logs würde ich später woandershin laufen lassen damit ich der Softwareverteilung die Schreibrechte wieder entziehen kann, glaube das ist besser.

 

Weiter...

Ich hab mitlerweile im AD in der OU "Softwareverteilung" eine Globale-Sicherheits-Gruppe "MozillaThunderbird" erstellt. Der Testrechner "Boreas" ist derzeit alleiniges Mitglied dieser.

 

Der Ordner "MozillaThunderbird" unter \\server\Softwareverteilung$\ hat im Reiter "Sicherheit" oben angelegte Gruppe "MozillaThunderbird" mit den Rechten "Ä,L/A,O,L,S .

Die Freigabe für den Ordner MozillaThunderbird gilt für "Jeder" mit den Rechen L,S .

So. Das Script startet, vergleicht die Versionen, zeigt diese an, macht sein log,

macht die angeordnete 1. Pause und wenn ich dann ne Taste drücke bricht es ab und das Anmeldefenster erscheint. Kann leider nicht erkennen was das Problem ist.

Das log aus der "if" Zeile wird da nicht mehr erzeugt!

Es geht auch nicht zu "end", denn dort habe ich auch eine pause drin und würde das abfangen.

Kann es sein das der Vergleich scheitert weil mein Vergleichsinhalt Leerzeichen und Klammern hat oder sowas?

 

aktueller Code:

REM _______________________________________________________________
REM WICHTIG! Hier die aktuelle zu verteilende Version eingeben.
REM Die Installerdatei muss so benannt sein: Thunderbird[Version].exe
set newversion=10.0.2 (de)
REM _______________________________________________________________

set wd=\\gmbu-server\Softwareverteilung$\MozillaThunderbird\
set log=\\gmbu-server\Softwareverteilung$\MozillaThunderbird\TBlog.txt
set instversion=999 

echo Thunderbird Installation wird geprueft...

for /f "tokens=3 delims=	" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Thunderbird" /v "CurrentVersion" ^|findstr "CurrentVersion"') do set instversion=%%a
echo %computername% mit Thunderbird Version %instversion% >> %log%

pause
if %instversion%==%newversion% echo %date% %time% - %computername% hat bereits Version %newversion% installiert. >> %log% & goto end

echo %date% %time% - %computername% startet die Thunderbird Installation...
echo %date% %time% - %computername% startet die Thunderbird Installation... >> %log%

:pause

REM Format des Installers: Thunderbird[Version].exe - "Thunderbird Setup 10.0.2esr.exe"
::"%SCRIPTPATH%\Thunderbird Setup %newversion%esr.exe" -ms
"%wd%\Thunderbird Setup %newversion%esr.exe" -ms

REM 32bit Einstellungsdateien kopieren
if exist "%programfiles%\Mozilla Thunderbird\" copy /Y "%wd%\override.ini" "%programfiles%\Mozilla Thunderbird\"
if exist "%programfiles%\Mozilla Thunderbird\" copy /Y "%wd%\mozilla.cfg" "%programfiles%\Mozilla Thunderbird\"
if exist "%programfiles%\Mozilla Thunderbird\" copy /Y "%wd%\local-settings.js" "%programfiles%\Mozilla Thunderbird\defaults\pref"

REM 64bit Einstellungsdateien kopieren
if exist "%ProgramFiles(x86)%\Mozilla Thunderbird\" copy /Y "%wd%\override.ini" "%ProgramFiles(x86)%\Mozilla Thunderbird\"
if exist "%ProgramFiles(x86)%\Mozilla Thunderbird\" copy /Y "%wd%\mozilla.cfg" "%ProgramFiles(x86)%\Mozilla Thunderbird\"
if exist "%ProgramFiles(x86)%\Mozilla Thunderbird\" copy /Y "%wd%\local-settings.js" "%ProgramFiles(x86)%\Mozilla Thunderbird\defaults\pref"

echo %date% %time% - %computername% hat die Installation abgeschlossen...
echo %date% %time% - %computername% hat die Installation abgeschlossen... >> %log%

pause

:end
pause
endlocal

 

 

_________________________________________________

 

bezüglich Webmailer... Roundcube verwende ich auch :-)

 

byPö

Link zu diesem Kommentar

Update:

 

nachdem ich mich zum Thema "delims" belesen habe habe ich den Versionsvergleich nochmals abgeändert. Hintergrund: Vermutlich verursachen die Leerzeichen und oder Klammern Probleme und die Batch bricht ab.

 

Abhilfe schaffte es beim If Vergleich die Versionen in Klammern zu setzen.

 

Weiterhin gilt für delims : werden sie gar nicht definiert, wird standardmäßig bei TAB UND Leerzeichen getrennt, genau das was ich brauche um nur die Versionsnummer der Software ohne Länderkennung zu filtern.

 

Danach läuft das Script, und inklusive Log sieht das so aus:

 

REM _______________________________________________________________
REM WICHTIG! Hier die aktuelle zu verteilende Version eingeben.
REM Die Installerdatei muss so benannt sein: Thunderbird[Version].exe
set newversion=10.0.3
REM _______________________________________________________________

set wd=\\servername\Softwareverteilung$\MozillaThunderbird\
set log=\\servername\Log$\Thunderbird-Installationen-Log.txt
set instversion=99999 

echo Thunderbird Installation wird geprueft...

for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Thunderbird" /v "CurrentVersion" ^|findstr "CurrentVersion"') do set instversion=%%a

if "%instversion%"=="%newversion%" echo %date% %time% - %computername% hat bereits Version %newversion% installiert. >> %log% & goto end

echo %date% %time% - %computername% hat die Thunderbird Installation %istversion%. >> %log%
echo %date% %time% - %computername% startet die Thunderbird Installation %newversion%. >> %log%

"%wd%\Thunderbird Setup %newversion%esr.exe" -ms

REM 32bit Einstellungsdateien kopieren
if exist "%programfiles%\Mozilla Thunderbird\" copy /Y "%wd%\override.ini" "%programfiles%\Mozilla Thunderbird\"
if exist "%programfiles%\Mozilla Thunderbird\" copy /Y "%wd%\mozilla.cfg" "%programfiles%\Mozilla Thunderbird\"
if exist "%programfiles%\Mozilla Thunderbird\" copy /Y "%wd%\local-settings.js" "%programfiles%\Mozilla Thunderbird\defaults\pref"

REM 64bit Einstellungsdateien kopieren
if exist "%ProgramFiles(x86)%\Mozilla Thunderbird\" copy /Y "%wd%\override.ini" "%ProgramFiles(x86)%\Mozilla Thunderbird\"
if exist "%ProgramFiles(x86)%\Mozilla Thunderbird\" copy /Y "%wd%\mozilla.cfg" "%ProgramFiles(x86)%\Mozilla Thunderbird\"
if exist "%ProgramFiles(x86)%\Mozilla Thunderbird\" copy /Y "%wd%\local-settings.js" "%ProgramFiles(x86)%\Mozilla Thunderbird\defaults\pref"

echo %date% %time% - %computername% hat die Thunderbird Installation %newversion% abgeschlossen... >> %log%

:end
::pause
endlocal

 

Das Log erfasst mit Datum und Uhrzeit bei jedem Client- Rechnerstart:

- bestehende Version

- ggf. Updatestart wenn erforderlich

- ggf. Updateende

 

Batch bisher erfolgreich eingesetzt auf :

W XP Prof SP3 32bit

W 7 Prof SP1 32bit

 

 

Ich bitte um Kommentare und Verbesserungen... z.B. wäre noch das Handling zu klären wenn gar kein Thunderbird installiert ist und die Prüfpfade nicht existieren, und wie/wo man Errorlevel einbinden sollte.

 

Und Danke an H.S. Für die Unterstützung!

 

byPö

Link zu diesem Kommentar

Hi,

 

nur so als Ansatz:

 

Wir verwenden für einige Dinge immer noch Kixtart:

 

IF GetFileVersion("C:\Programme\Java\jre6\bin\java.exe", "ProductVersion" )<>"6.0.310.5"
 shell "msiexec /qn /i \\server\Softwareverteilung\MSI\JRE6031\jre1.6.0_31.msi TRANSFORMS=\\server\Softwareverteilung\MSI\JRE6031\jre1031.mst ADDLOCAL=ALL REBOOT=Suppress JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0 JQS=0"
 shell "msiexec /qn /x {4A03706F-666A-4037-7777-5F2748764D10}" 	; Remove Java Auto Updater
 shell "C:\Programme\Java\jre6\bin\jqs -unregister" 	; Java Quick Start deaktivieren
endif

 

Das ist ein Beispiel für die JRE-Installation

 

Der Vorteil: Man kann die exakte Produktversion von DLL's oder EXE'en abfragen und verwenden.

Link zu diesem Kommentar

Ändere den Code mal bitte etwas ab:

 

1.)

set instversion=0

 

und 2.)

 

pause

for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Thunderbird" /v "CurrentVersion" ^|findstr "CurrentVersion"') do set instversion=%%c
REM das pause hier geht noch
pause

echo %instversion%
echo %newversion%
REM dieses pause müsste ja noch unproblematisch sein
pause

if %instversion% == %newversion% echo %date% %time% - %computername% hat bereits Version %newversion% installiert. >> %log% & goto end
REM weder das pause vor end noch das pause 3 Zeilen drunter gehen, log der nächsten 2 zeilen wird nicht geschrieben...

echo %date% %time% - %computername% startet die Thunderbird Installation...
echo %date% %time% - %computername% startet die Thunderbird Installation... >> %log%

pause

 

Also mich interessiert die Ausgabe der instversion, ich denke da geht was schief. Und wie gesagt, nen Screenshot 1 pause vorm Crash wäre zusätzlich brauchbar.

Link zu diesem Kommentar

Hallo allerseits,

 

es ist im letzten Post womöglich untergegangen, aber das Script läuft mit obigen Code jetzt absolut ordnungsgemäß.

 

@zahni:Kixart kenn ich nur dem Namen nach, da muss ich mich erst mal mit beschäftigen :-)

 

@ Hannes:

dein Code- Post zu 2.) gibt korrekt den Problemzustand wieder der bestand.

Die Ausgabe der Versionen lautete:

 

instversion= 9.0 (de)
newversion= 10.0.2 (de)

Nachdem ich über Probleme gelesen hatte wenn Variablen Leerzeichen enthalten und gleichzeitig gelesen habe das

..... delim="

, bzw. das weglassen von delim Tabs und Leerzeichen trennt habe ich wie oben im Code zu sehen zum einen die Versionen in Anführungszeichen gesetzt (was vermutlich jetzt gar nicht mehr nötig gewesen wäre) und als zweites den Vergleich beschränkt auf 9.0 == 10.0.2 statt 9.0 (de) == 10.0.2 (de) . Und das hat geholfen, das Script ist nicht mehr abgebrochen.

 

Ich habe in anderen Beispielen von Batchscripten übrigens auch den Fall gefunden das die Trennung zwischen CurrentVersion / Reg_SZ / usw NICHT mit Leerzeichen wie bei dir sondern mit Tabs erfolgt. Die Frage wieso das mal so und mal so ist bleibt wohl erst mal offen. Als allgemeinen Workaroud empfehle ich das Weglassen von delim , denn dann trennt es ja bei TAB und Leerzeichen.

 

 

Zum Thema Anzeige von Startscripten .... gibts da wirklich gar keine Möglichkeit unter W7? Man kann Anmeldescripte anzeigen aber keine Startscripte?

 

byPö

Link zu diesem Kommentar
Hi,

 

nur so als Ansatz:

 

Wir verwenden für einige Dinge immer noch Kixtart:

 

IF GetFileVersion("C:\Programme\Java\jre6\bin\java.exe", "ProductVersion" )<>"6.0.310.5"
 shell "msiexec /qn /i \\server\Softwareverteilung\MSI\JRE6031\jre1.6.0_31.msi TRANSFORMS=\\server\Softwareverteilung\MSI\JRE6031\jre1031.mst ADDLOCAL=ALL REBOOT=Suppress JAVAUPDATE=0 JU=0 AUTOUPDATECHECK=0 JQS=0"
 shell "msiexec /qn /x {4A03706F-666A-4037-7777-5F2748764D10}" 	; Remove Java Auto Updater
 shell "C:\Programme\Java\jre6\bin\jqs -unregister" 	; Java Quick Start deaktivieren
endif

 

Das ist ein Beispiel für die JRE-Installation

 

Der Vorteil: Man kann die exakte Produktversion von DLL's oder EXE'en abfragen und verwenden.

 

Kixtart hat mein letzter Chef auch verwendet... war allerdings nur ein 3-monatiges Praktikum, hab mich in der Zeit also nicht ausreichend damit befasst ^^

Kann Kixtart auch zuverlässig .exe Installer durchnüdeln? Denn mit msiexec können wir bei Firefox und Thunderbird nichts anfangen, gibt ja offiziell keine MSI. Sonst hätten wir den ganzen Batch Stress hier nicht ;)

 

Hallo allerseits,

 

es ist im letzten Post womöglich untergegangen, aber das Script läuft mit obigen Code jetzt absolut ordnungsgemäß.

Sorry, ich hatte deinen letzten Post mit der Erfolgsmeldung komplett übersehen O.o

 

Davon abgesehen:

  • Ja, ohne Angabe von Delims werden die Standarddelemiter verwendet. Das habe ich aber bewusst anders programmiert und es hatte bei mir ja auch, so wie in meinem Blogpost beschrieben, funktioniert. Also mit for /f "tokens=1,2,3 delims= ". Aber bei Stringoperationen mit for gibts oft viele Wege zum Ziel.
  • Die Anführungszeichen bei der If Abfrage bedeuten nur, dass auch leere oder nicht definierte Variablen überprüft werden. Statt der Anführungszeichen kannst du z.B. auch eckige Klammern verwenden. Beispiel:
    set a=
    set b=
    if [%a%]==[%b%] echo gleich
    pause


    2 leere Variablen, der Vergleich ist also korrekt. Ohne ein umschließendes Sonderzeichen um beide Variablen (einige Sonderzeichen gehen glaub ich, beide Variablen müssen aber vom gleichen umschlossen sein) stürzt Batch bei der If Abfrage ab. Mit Sonderzeichen werden die Variablen als leer, also "" (<- 2 Anführungsstriche), betrachtet. Der Vergleich funktioniert.
    Daher sollte man immer bei jeder Batch entweder jede Variable am Anfang mit einem Wert definieren und/oder jede If Abfrage mit dieser Methode optimieren. Ansonsten kann es bei größeren Batch Systemen (ich habe ein Archivsystem bestehend aus fast 600 Batchzeilen geschrieben) schnell zu unerklärlichen Abstürzen kommen.

  • Anzeige von Startscripts unter Windows 7: bisher kenne ich keinen Weg, bin dem aber noch nicht so verstärkt nachgegangen.
    Wenn du bei Google "Windows 7 Batch Scripts sichtbar ausführen" suchst, kommt - zumindest bei mir - mein damaliges Thema gleich an erster Stelle:
    GPO Batch Startscripts unter Windows 7 nicht mehr möglich?
    Daher Batch Scripts vorher ausreichend testen. Durch manuelle Ausführung in Verbindung mit Pause kannst du die Funktionsfähigkeit erstmal gewährleisten und danach durch Logeinträge an kritischen Stellen auch die Funktionsfähigkeit innerhalb der GPO sicherstellen. Wenn es dann funktioniert reicht ein Log am Anfang oder am Ende, je nachdem. Kommt alles darauf an was du verteilst und wieviel du dokumentiert haben willst/musst usw.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...