IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Récupérer les journaux d'événement pour les traiter sur un autre poste


Sujet :

Dotnet

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 48
    Points
    48
    Par défaut Récupérer les journaux d'événement pour les traiter sur un autre poste
    Bonjour,

    Voilà mon problème, j'ai besoin de récupérer les journaux d'un poste pour pouvoir les traiter sur un autre poste.
    Je me suis dit simple à faire, je copie les fichiers *.evt du dossier $Windows\system32\config dans un zip, et je récupère le zip.

    Puis pour traiter, j'ouvre l'observateur d'événements et je fais "Action -> Ouvrir un fichier journal...".

    Sauf que lorsque j'essaye d'ouvrir le fichier en question, il me dit
    Le fichier journal d'événement est endommagé
    si le journal contient des infos, sinon il m'ouvre bien le fichier s'il n'y a aucune information dedans.

    Est-ce que un simple copier coller par du code c# est suffisant pour récupérer un journal ou y a t-il une autre méthode pour ne pas endommagé le fichier ?

  2. #2
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Bonjour,

    Essaye de voir la classe EventLog et sa propriété Entries :

    http://msdn.microsoft.com/fr-fr/libr...es(VS.80).aspx

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    EventLog Journal = new EventLog("LogName", "MachineName", "Source");
     
                foreach (EventLogEntry evt in Journal.Entries)
                    Console.WriteLine("Source : {0} Message : {1}", evt.Source, evt.Message);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Redouane me = new Redouane();
    if (me.Connect())
        me.ShareInformations();

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Merci, c'est vrai que je pourrais utiliser cette méthode pour écrire dans un fichier texte toutes les informations mais cela prendrait du temps et pour le traitement par la suite, avec ton exemple, je n'aurais que la source et le message.

    Je préfèrerai avoir un *.evt comme on obtient en faisant "clic droit -> Enregistrer le fichier journal sous.." Pour pouvoir avoir toute les informations et les traiter dans leur intégralité !

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Bon j'ai procédé différemment je récupère toutes les informations dans un csv qui permet de traiter les données plus facilement mais ce n'est pas réellement ce que je voulais quelqu'un d'autre a-t-il trouvé une solution ?

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    string tempPath = GetPath("Log") + "\\Temp";
    Directory.CreateDirectory(tempPath);
    EventLog[] remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName);
     
    try
    {
        for (int i = 0; i < remoteEventLogs.Length; i++)
        {
            string logName = remoteEventLogs[i].Log;
            EventLog logEvent = new EventLog(logName);
     
            StreamWriter sw = new StreamWriter(tempPath + "\\" + logName + ".evt.csv", false, Encoding.GetEncoding(1252));
            sw.WriteLine("Type;Date;Heure;Source;Catégorie;Événement;Utilisateur;Ordinateur;Message");
     
            for (int numLog = logEvent.Entries.Count - 1; numLog >= 0; numLog--)
            {
                EventLogEntry evt = logEvent.Entries[numLog];
                string message = evt.Message.Replace("\n", "\n;;;;;;;;");
                string user = (evt.UserName == null) ? "N/A" : evt.UserName;
     
                sw.WriteLine(evt.EntryType + ";" + evt.TimeGenerated.ToShortDateString() + ";" + evt.TimeGenerated.ToShortTimeString() + ";" +
                    evt.Source + ";" + evt.Category + ";" + evt.InstanceId + ";" + user + ";" + evt.MachineName + ";" +
                    message);
            }
            sw.Close();
        }
    }
    catch (Exception)
    {
        log.Error("Impossible de récupérer les journaux d'évènements situés dans le répertoire \"$WinDir\\system32\\config\".");
    }

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Je me permet de rouvrir le topic pour informer la communauté d'une méthode permettant de faire un backup des journaux d'évènements.

    Apparemment, il y a une lacune dans les classes du framework .NET. Mais contournement il y a :

    http://www.webtropy.com/articles/art...BackupEventLog

    http://social.msdn.microsoft.com/For...6-44f7ec7a2d57

    http://www.koders.com/csharp/fid9FAC...pEventLog#L720

    Pour moi cela donne le code suivant en c# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Directory.CreateDirectory(tempPath);
    EventLog[] remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName);
     
    try
    {
        for (int i = 0; i < remoteEventLogs.Length; i++)
        {
            string logName = remoteEventLogs[i].Log;
            EventLog logEvent = new EventLog(logName);
     
            IntPtr hEventLog;
            int lretv;
            hEventLog = (IntPtr)OpenEventLogA(Environment.MachineName, logEvent.Log);
            if (hEventLog == IntPtr.Zero)
            {
                log.Debug("Impossible d'ouvrir le journal d'évènements \""+logEvent.Log+"\".");
            }
            else
            {
                lretv = BackupEventLogA(hEventLog, logEvent.Log + ".evt");
                if (lretv == 0)
                {
                    log.Debug("Impossible de faire un backup du journal d'évènements \"" + logEvent.Log + "\".");
                }
            }
        }
     
    }
    catch (Exception)
    {
        log.Error("Impossible de récupérer les journaux d'évènements situés dans le répertoire \"$WinDir\\system32\\config\".");
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/03/2011, 19h52
  2. Réponses: 7
    Dernier message: 23/09/2009, 10h02
  3. Réponses: 0
    Dernier message: 21/09/2009, 23h41
  4. Réponses: 14
    Dernier message: 24/10/2006, 06h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo