sakalala
Messages postés19Date d'inscriptionmardi 21 juin 2005StatutMembreDernière intervention25 janvier 2008
-
21 oct. 2007 à 21:39
sakalala
Messages postés19Date d'inscriptionmardi 21 juin 2005StatutMembreDernière intervention25 janvier 2008
-
26 oct. 2007 à 15:50
Bonjour,
Pourriez-vous m'aider à écrire un script VBS pour lire le fichier log d'un serveur Windows :
-lecture de 10 dernières minutes du fichier en cherchant un mot par ex "busy" et compter si il apparait combien de fois
- si il apparait au moins une fois, ne rien faire par contre si aucune apparition, remonter un message d'erreur.
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 26 oct. 2007 à 14:26
Bonjour,
'Lecture du tableau de la fin jusqu'au début
cpt= 0
For i=UBound(Fic) To 1 Step -1
'Vérification que les 16 premiers caractères de la ligne
'courante soient de type Date
If IsDate(Left(Fic(i),16)) Then
'au 1er passage dans la boucle For...Next, on initialise
'la variable DateDebut dans laquelle on met les 16
'premiers caractères de gauche de la dernière ligne
'du tableau ex: 13/10/2007 19:07
If cpt =0 Then DateDebut=Left(Fic(i),16) : cpt=cpt+1
'Utilisation de la fonction DateDiff pour comparer l'écart en minutes ("n")
'entre la date de la variable dateDebut et la date (les 1- premiers
'caractères de la ligne courante du tableau
'Si l'écart (10') est atteint, on arrête de parcourir les lignes du tableau
If DateDiff("n",Left(Fic(i),16), DateDebut) > 10 Then Exit For
'Recherche sur la ligne courante du tableau si le mot "busy" existe
'avec implémentation d'un compteur
If InStr(1, Fic(i), strSearch) <> 0 Then cpt=cpt+1
End if
Next
MsgBox "le mot " & strSearch & " a été trouvé " & cpt -1 & " fois"
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 21 oct. 2007 à 22:50
Bonsoir,
L'exemple ci-dessous permet de vérifier l'existence d'une occurrence dans une chaine.
Il suffit donc de lire le fichier par la fin et de vérifier date/occurrence.
Mais pour celà, il faut voir la structure du .log
If RegExpTest(sChaine, Texte) = True Then msgbox "expression trouvée...true"
If RegExpTest(sChaine, Texte) = False Then msgbox "expression non trouvée...false"
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches
Set regEx = New RegExp ' Crée une expression régulière.
regEx.Pattern = patrn ' Définit les critères.
regEx.IgnoreCase = True ' True,False Ignore la casse.
regEx.Global = False ' True, False rechercre récursive.
Set Matches = regEx.Execute(strng) ' Lance la recherche
For Each Match in Matches ' Itère la collection Matches.
RegExpTest = True : Exit Function ' Retourne Vrai si expression trouvée + exit
Next
RegExpTest = False ' Retourne Faux si expression non trouvée
End Function
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 22 oct. 2007 à 09:37
Bonjour,
1) Lecture du fichier ligne par ligne et écriture dans un tableau;
2) Lecture du tableau par la fin avec test de la date + recherche de l'occurrence.
Option Explicit
Const ForReading = 1
Dim objFso, objTextStream, strFile, strSearch, i, DateDebut
Dim Fic()
ReDim Fic(0)
strFile = "D:\LOG.txt"
strSearch = "busy"
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFso.OpenTextFile(strFile, ForReading)
Do While Not objTextStream.AtEndOfStream
ReDim Preserve Fic(UBound(Fic) + 1)
Fic(UBound(Fic)) = objTextStream.ReadLine
Loop
objTextStream.Close
Set objTextStream = Nothing
For i=UBound(Fic) To 1 Step -1
If i=UBound(Fic) Then DateDebut = Left(Fic(i),16)
If DateDiff("n",Left(Fic(i),16), DateDebut) > 10 Then Exit For
If InStr(1, Fic(i), strSearch) <> 0 Then MsgBox Fic(i)
Next
Set objFso = Nothing
jean-marc
Vous n’avez pas trouvé la réponse que vous recherchez ?
sakalala
Messages postés19Date d'inscriptionmardi 21 juin 2005StatutMembreDernière intervention25 janvier 2008 22 oct. 2007 à 11:08
Bonjour,
Le script fonctionne très bien par contre j'ai un petit souci pour initialisé un compteur, au lieu d'afficher les lignes, il ne me remonte que le nombre de fois il a trouver le mot
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 22 oct. 2007 à 11:23
Re,
exemple:
Dim cpt, resultat
cpt = 1
For i=UBound(Fic) To 1 Step -1
If i=UBound(Fic) Then DateDebut = Left(Fic(i),16)
If DateDiff("n",Left(Fic(i),16), DateDebut) > 10 Then Exit For
If InStr(1, Fic(i), strSearch) <> 0 Then
resultat = "compteur:" & cpt &vbTab& Fic(i) &vbCrLf&vbCrLf& resultat
cpt = cpt+1
End if
Next
MsgBox resultat
sakalala
Messages postés19Date d'inscriptionmardi 21 juin 2005StatutMembreDernière intervention25 janvier 2008 22 oct. 2007 à 11:57
En fait ce n'est pas ce qui je souhetais mais ça donne aussi le bon resultat. Je souhaitais ne pas afficher les messages mais seulement le nombre de lignes trouvées car celà risque d'être illisible s'il y a bcp d'occurences
Ex.
au lieu de :
13/10/2007 19:21:17 serveur SERKernel[busy] : svc-appcenter;INFO;PteEventManager2handle
Event;SERKernel;GWINFO; GWINFO : CR Technique OK renvoyé pour l'évènement : Forfait::SicSer::formule
13/10/2007 19:21:17 serveur SERKernel[busy] : svc-appcenter;INFO;PteEventManager2handle
Event;SERKernel;GWINFO; GWINFO : Transformation XML OK pour l'évènement : Forfait::SicSer::formuleSo
sakalala
Messages postés19Date d'inscriptionmardi 21 juin 2005StatutMembreDernière intervention25 janvier 2008 22 oct. 2007 à 12:01
Comme je suis un peu débutant dans VBS, il y a certaines lignes que je comprends pas bien.
Aurais-tu la gentillesse de commenter le script en vue d'une évolution future.
Merci
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 22 oct. 2007 à 13:19
Re,
Avec les commentaires !!!
'Quand vous utilisez l'instruction Option Explicit, vous devez
'déclarer explicitement toutes les variables en utilisant les
'instructions Dim, Private, Public ou ReDim.
'Si vous essayez d'utiliser le nom d'une variable non déclarée, une erreur se produit
Option Explicit
'Déclaration des constantesConst ForReading 1, ForWriting 2, ForAppending = 8
'Déclaration des objets et variables
Dim objFso, objTextStream, strFile, strSearch
Dim i, DateDebut, resultat, cpt
'Initialisation d'un tableau dynamique
Dim Fic()
ReDim Fic(0)
strFile = "D:\LOG.txt"
strSearch = "busy"
'Ouvre un fichier spécifié et renvoie un objet TextStream qui peut
'être utilisé pour lire, écrire et effectuer des ajouts au fichier
'ici ce sera en lecture
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFso.OpenTextFile(strFile, ForReading)
'Lecture ligne à ligne du début jusqu'à la fin du fichier
Do While Not objTextStream.AtEndOfStream
'Implémentation du tableau
ReDim Preserve Fic(UBound(Fic) + 1)
Fic(UBound(Fic)) = objTextStream.ReadLine
Loop
'Fermeture du fichier
objTextStream.Close
'Suppression des objets
Set objTextStream = Nothing
Set objFso = Nothing
'Lecture du tableau de la fin jusqu'au début
cpt = 1
For i=UBound(Fic) To 1 Step -1
'au 1er passage dans la boucle For...Next, on initialise
'la variable DateDebut dans laquelle on met les 16
'premiers caractères de gauche de la dernière ligne
'du tableau ex: 13/10/2007 19:07
If i=UBound(Fic) Then DateDebut = Left(Fic(i),16)
'Utilisation de la fonction DateDiff pour comparer l'écart en minutes ("n")
'entre la date de la variable dateDebut et la date (les 1- premiers
'caractères de la ligne courante du tableau
'Si l'écart (10') est atteint, on arrête de parcourir les lignes du tableau
If DateDiff("n",Left(Fic(i),16), DateDebut) > 10 Then Exit For
'Recherche sur la ligne courant du tableau si le mot "busy" existe
'avec implémentation d'un compteur
If InStr(1, Fic(i), strSearch) <> 0 Then
'la variable resultat n'est pas remplie car la ligne a été mise
'en commentaire (le caractère ' correspond au REM du dos)
'resultat = "compteur:" & cpt &vbTab& Fic(i) &vbCrLf&vbCrLf& resultat
'Incrémentaion du compteur
cpt = cpt+1
End if
Next
MsgBox "le mot " & strSearch & " a été trouvé " & cpt & " fois"
sakalala
Messages postés19Date d'inscriptionmardi 21 juin 2005StatutMembreDernière intervention25 janvier 2008 26 oct. 2007 à 09:25
Bonjour,
Une petite dernière pour la route.
J'ai découvert un nouveau pb, à savoir quand la ligne du fichier log ne commence pas par la date, le script remonte une erreur pour dire que le debut de ligne ne correspond pas type attendu :
P:\Document\Scripts\Script en test\read4.vbs(52, 5) Erreur d'exécution Microsoft VBScript: Type incompatible: '[string: " serveur SERKer"]'
Comment faire pour ne pas prendre en compte ces genres de lignes dans le tableau
sakalala
Messages postés19Date d'inscriptionmardi 21 juin 2005StatutMembreDernière intervention25 janvier 2008 26 oct. 2007 à 09:55
Bonjour,
Une petite dernière pour la route.
J'ai découvert un nouveau pb, à savoir quand la ligne du fichier log ne commence pas par la date, le script remonte une erreur pour dire que le debut de ligne ne correspond pas type attendu :
P:\Document\Scripts\Script en test\read4.vbs(52, 5) Erreur d'exécution Microsoft VBScript: Type incompatible: '[string: " serveur SERKer"]'
Comment faire pour ne pas prendre en compte ces genres de lignes dans le tableau