Jump to content

Hannes Schurig

Members
  • Gesamte Inhalte

    5
  • Registriert seit

  • Letzter Besuch

Profile Fields

  • Member Title
    Newbie

Fortschritt von Hannes Schurig

Rookie

Rookie (2/14)

  • Erste Antwort
  • Eine Woche dabei
  • Einen Monat dabei
  • 1 Jahre dabei
  • 5 Jahre dabei!

Neueste Abzeichen

10

Reputation in der Community

  1. 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 ;) 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.
  2. Ä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.
  3. 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. 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.
  4. 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.
  5. 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: Okay in der derzeitigen Form wird also jegliche Firefox Installation mit der 10.0.2 ersetzt, richtig?
×
×
  • Neu erstellen...