Empirum: Einfacherer Zugriff auf detaillierte Fehler-Protokolle

Schlägt eine Installation eines Empirum Paketes fehl, so wird dies in der Management Console mit dem Status „Failed“ im SWDepotLog und im Status versehen. Im erweiterten ErrorLog kann man ggf. noch den Fehlercode oder einen kleinen Hinweis auf den möglichen Fehler bekommen. Doch häufig benötigt man den Zugriff auf die komplette Log Datei der Installation. Diese wiederum liegt lokal auf dem Computer. Warum?

Hintergrund

Im Standard der Empirum Paket Vorlagen werden diese detaillierten Log Dateien von extern aufgerufenen Setup Routinen wie MSI und Unattended im %WINDIR%\Temp Ordner abgelegt. Schlägt eine Installation fehl, werden diese Log Dateien mit den Fehlern vorgehalten (nicht gelöscht) damit das Problem näher erörtert werden kann. Wenn nun Computer ausgeschaltet sind oder der Zugriff auf den Computer nicht sichergestellt ist (Notebook Benutzer, Firewall, etc.) kann derzeit jedoch keine weiterführende bzw. zeitnahe Analyse bezüglich des Problems stattfinden.

Idee

Ich habe mir dazu ausgedacht, dass im Fehlerfalle diese Log Dateien zusätzlich in das Log Verzeichnis des Agenten kopiert werden und dieser überträgt die Dateien auf den zentralen EmpirumServer. Dieser ist immer erreichbar und der Zugriff kann zentral gesteuert werden. Die Synchronisierung der Log Dateien wird über den EmpirumAgenten sichergestellt, da diese in einem Unterverzeichnis von C:\EmpirumAgent\Log abgelegt werden.

Hinweis: Es werden nur *.log Dateien vom EmpirumAgenten automatisch übertragen.

Umsetzung

Die nachfolgenden Beispiele sind ggf. auf die eigene Umgebung und das Agenten-Verzeichnis anzupassen.

Notwendige Setup.inf Anpassung

Dazu wurde folgende Änderung bzw. zusätzlichen Zeilen in der Setup.inf erstellt:

[Environment]
MSILogFileName=MSI_%ProductName%.%Version%.%Revision%.log
MSILogFile=%Temp%\%MSILogFileName%
ErrorMsgSyncDir=C:\EmpirumAgent\Log\InstallErrors.CU\%Computername%

[AbortMSIInst]
CALLHIDDEN %COMSPEC% /C MD "%ErrorMsgSyncDir%"
COPY "%MSILogFile%" "%ErrorMsgSyncDir%\%MSILogFileName%"
ErrorLogMsg %ErrorLogMessage% ErrorLevel: %ErrorLevel%
Abort

[AbortMSIUnInst]
-Abort
-ErrorLogMsg %ErrorLogMessage% ErrorLevel: %ErrorLevel%
-COPY "%MSILogFile%" "%ErrorMsgSyncDir%\%MSILogFileName%"
-CALLHIDDEN %COMSPEC% /C MD "%ErrorMsgSyncDir%"

Anpassung in der Management Console

Der Zugriff auf das zentrale Log Verzeichnis eines Computers kann über einen „Rechtsklick“ auf den Computer geschehenDie Konfiguration wird über die Management Console, Extras, Eigenschaften unter „Externe Programme“ vorgenommen.

  • Zentrales Log Verzeichnis
  • explorer \\%EmpirumServer%\configurator$\Log\InstallErrors.CU\%Computername%

Das gezeigte Beispiel nutzt die EmpirumServer Variable. Hier muss ggf. der zentrale EmpirumServer eingetragen werden und das Support-Personal zum Lesen berechtigt werden.

Bereinigung

Die zyklische Bereinigung des zentralen Log Verzeichnisses muss derzeit von Hand durchgeführt werden.

7 Kommentare Schreibe einen Kommentar

  1. Hallo Jochen,

    super Idee! Manchmal sind die Logs im Standard wirklich nicht ausreichend bzw. die Meldung wenig aussagekräftig.

    Muss ich irgend welche Ordner manuell anlegen oder wird das alles über die setup.inf Anpassungen gesteuert? Wenn ich es richtig gelesen habe muss man nichts händisch anlegen?

    Viele Grüße
    Udo

    • Hallo Udo,

      das Verzeichnis im lokalen EmpirumAgent Verzeichnis wird über die Setup.inf erstellt.
      Dieser Ordner samt der Dateien wird über den Log.-Sync des Agenten auf den EmpirumServer übertragen.
      Setup.inf Anpassungen und in der EMC ggf. die „Externen Programme“ erweitern. Das war es!

      Danke und Grüße
      Jochen

      • Hallo Jochen,

        es scheint zu funktionieren. Ich habe einen Client, wo das entsprechende Log in den InstallErrors.CU Ordner auf dem Empirum Server verschoben wurde und mir auch die Lösung gebracht hat 🙂 Bei einem anderen Client allerdings wird kein Log erstellt. In diesem Fall ruft mir die Verknüpfung unter Externe Programme des Clients > Zentrales Log Verzeichnis meine Windows Standard Ordner für Dokumente auf.

        Ist das Verhalten korrekt, wenn kein Log File zu dem betreffenden Client gefunden wurde? Zweitens frage ich mich warum keins erstellt wurde? Es geht um eine SnagIT MSI Installation.

        Viele Grüße
        Udo

  2. Wie müsste man das anpassen, wenn man zwei oder mehr MSI Log Dateien hat?
    kann man das mit Replace_env umsetzen um sich viel schreiberei zu ersparen?
    Ich hätte hier eine setup.inf mit 2 msi dateien und aktuell kopiert er mir hier nur 1 log und das zweite nicht.

    Ich steh grad auf der Leitung und sehe vor lauter Bäumen den Wald nicht.

    Vielen Dank, Gruß
    Peter P.

    • Hallo Peter,
      wenn Du mehrere MSI Dateien und somit ggf. LOGs hast, dann musst du für einen eindeutigen Namen sorgen, wenn Du alle im Fehlerfalle kopieren möchtest.
      Zumeist solltest Du jedoch nur eine Datei haben, da die letzte Installation dann in einen Fehler gelaufen ist.
      Wenn er dir nur eine kopiert, kann es sein, dass er bereits nach der ersten Fehlinstallation bereits abbricht?
      Als Idee für eine Eindeutigkeit im Namen – baue ggf. die MSI GUID mit ein?
      Viele Grüße
      Jochen

  3. Hallo Jochen,

    ersteinmal Danke für die ganze Arbeit die du so in dieses Blog steckst.Schaue hier gerne vorbei um anreize bzw Probleme gelöst zu bekommen.

    Nun zu meiner Frage an dich bzw die Allgemeinheit hier, wie kann ich am besten diese log Dateien im Fehlerfall an eine email Adresse schicken ?

    Ich habe leider immmer mal wieder clients , die Pakete nicht installieren.Da ich nicht jeden einzelnen abtelefonieren will/kann wäre eine Fehlermail mit aussagekräftiger Fehlermeldung sehr gut.
    Mit einem Powershell skript kann ich ja eine Mail versenden, wie binde ich das hier am besten ein.

    • Hallo Christian,

      mit meiner Methode oben, werden die detaillierten Fehler“berichte“ auf dem zentralen EmpirumServer gesammelt.
      Diese per Mail zu versenden – dafür habe ich nicht in der Tasche parat.
      Du müsstest nun ein Skript schreiben, dass alle x Minuten läuft und die Mails dann an einen Verteiler versendet und im besten Falle markiert,
      damit Du diese nicht noch einmal versendest.
      Ein Kunde hatte die Mail Versendung direkt in die Pakete eingebaut. Das sah am Ende schön im Mail-System aus, hatte meines Erachtens zwei Nachteile.
      Die Versendung geschieht vom Client aus und die Pakete waren um einiges größer/unleserlicher.

      Viele Grüße
      Jochen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert