Eventviewer - ntlogevent - extraction informations du journal d'observation des evénements windows

Contenu du snippet

Ce script testé, sous xp, permet d'extraire les informations du Journal d'événements de Windows,
à partir du fichier "Win32_NTLogEvent".

Dans cet exemple , les informations recueillies sont formatées dans un .txt

Source / Exemple :


'Lecture des enregistrements des journaux d'événements de Windows
'Source originale : Cedric NANA, LABORATOIRE SUPINFO DES TECHNOLOGIES MICROSOFT (Equipe Recherche)
'Publiée le 11/05/2005 http://www.laboratoire-microsoft.org/scripts/14221/
'Descriptif de Win32_NTLogEvent
'http://www.secretswindows.com/index.php?rubrique=scripts&ssrubrique=WMI&page=./scripts/wmi/win32ntlogevent.htm
'
'Selection sur LogFile="Application" ou "System", Type="erreur" et TimeGenerated <= à 15h
'
On Error Resume Next 
'Création fichier resultat 
Dim resultat : resultat =  "D:\Observateur_événements_" & Replace(Date, "/","-") & ".txt"

Dim Fso      : Set Fso = CreateObject("Scripting.fileSystemObject") 
Dim Rapport  : Set Rapport = Fso.openTextFile(resultat, 2, True) 

Dim strComputer, objWMIServices, objWMIObjectSet, objWMIObject    
strComputer = "." 
Set objWMIServices  = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set objWMIObjectSet = objWMIServices.ExecQuery _ 
   ("Select * from Win32_NTLogEvent Where (LogFile='Application' Or LogFile='system') And Type='erreur'") 
For Each objWMIObject In objWMIObjectSet
Dim MyComputer : MyComputer = objWMIObject.ComputerName 
       
If DateDiff("d", clair(objWMIObject.TimeGenerated), Now) <= 20 Then 
   Rapport.writeLine "----------------------------------------------------"     
   Rapport.writeLine "Ordinateur: "               & objWMIObject.ComputerName   
   Rapport.writeLine "Observateur d'événements: " & objWMIObject.LogFile 
   Rapport.writeLine "----------------------------------------------------" 
   Rapport.writeLine "Type: "                     & UCase(Left(objWMIObject.Type,1)) & mid(objWMIObject.Type,2) 
   Rapport.writeLine "Date: "                     & clair(objWMIObject.TimeGenerated) 
   Rapport.writeLine "Source: "                   & objWMIObject.SourceName 
   Rapport.writeLine "ID évén.: "                 & objWMIObject.EventCode  
   Rapport.writeLine "Utilisateur: "              & objWMIObject.User  
   Rapport.writeLine "Numéro d'enregistrement: "  & objWMIObject.RecordNumber 

   If Len(objWMIObject.Message) > 56 Then
      Rapport.writeLine "Description: " &vbCrLf& Cesure(objWMIObject.Message, 56) 
      Else
      Rapport.writeLine "Description: " &vbCrLf& objWMIObject.Message    
   End If

End If
Next
Rapport.Close
Set Rapport = Nothing
Set fso = Nothing : Set Rapport = Nothing
Set objWMIObjectSet = Nothing : Set objWMIServices  = Nothing

Dim WshShell : Set WshShell = CreateObject("WScript.Shell")
WshShell.Run resultat
Set WshShell = Nothing

'Envoi automatisé du mail
'Call EnvoiMail(resultat, MyComputer, Contenu)
WScript.Quit

Function clair(temps)
'tranformation de la date "aaaammjjhhmnss" en jj/mm/aaaa hh:mn
Dim debut, an, mois, jour, hhmn
	debut = left(temps,8)
	an = left(debut,4)
	mois = mid(debut,5,2)
	jour = right(debut,2)
	hhmn = " " & Mid(temps,9,2) & ":" & Mid(temps,11,2)
	clair = CStr(jour) & "/" & CStr(mois) & "/" & CStr(an) & CStr(hhmn)
	'MsgBox temps &vbCrLf& clair
End function

Function Cesure(texte,taillecesure) 
'Cette function Cesure est à améliorer
Dim posespace 
Dim textimp 
    
    While (Len(texte) > taillecesure) 
        'Vérifier si la césure ne se fait pas juste avant l'espace (apres un mot entier) : 
        If Mid(texte, taillecesure + 1, 1) = " " Then 
            'si c'est le cas , ne pas chercher d'espace 
            posespace = taillecesure 
        Else 
            'sinon, chercher un espace avant le mot en cours 
            posespace = InStrRev(Left(texte, taillecesure), " ") - 1 
        End If 
        'ajouter le texte tronqué à la sortie de la fonction 
        textimp = textimp & Left(texte, posespace) & vbCrLf   
        'tronquer le texte et recommencer la boucle 
        texte = Mid(Trim(texte), posespace + 2) 
     
    Wend 
    'ajouter le restant du texte 
    textimp = textimp & texte 
    'retourner le resultat de la fonction 
    Cesure = textimp 
End Function

Conclusion :


En cours d'écriture:
-
- résultat dans un fichier html pour pièce jointe de mail;
- résultat dans un fichier xls pour pièce jointe de mail;
- afficher le résultat .txt dans le corps du mail;
- afficher le résultat .htm dans le corps du mail;

La Query ne demande qu'à être développée.

jean-marc

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.