Fichiers dans un tableau VBS

Résolu/Fermé
delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008 - 10 juin 2008 à 12:35
 delawood - 7 juil. 2008 à 15:26
Bonjour,

Je cherche à faire un script VBS qui dans un repertoire recupere tous les fichiers et les met dans un tableu.. il stocke les infos dans un tableau ( nom du fichier + date de creation du fichier).. apres il teste la date de création la plus récente des fichiers... Et puis il renvoie un message de d'erreur ( ou CRITICAL car c'est pour faire du Nagios) dans le cas le ficher le plus récent à 24h.. Pour le moment, j'ai un script qui teste si un fichier dans le repertoire a plus de 24h mais ca bloque quand jai plusieurs fichiers car il renvoie toujours un message d'erreur car il ya des fichiers qui s'accumulent..
Je vous présente mon script :

<script language="VBScript">

If Wscript.Arguments.Named.Exists("h") Or Wscript.Arguments.Count = 0 Then
Wscript.Echo "Plugin help screen:"
Wscript.Arguments.ShowUsage()
Wscript.Quit(0)
End If

' Déclaration des variables et constantes
'----------------------------------------
strFolder = Wscript.Arguments.Unnamed.Item(0)
strMin = wscript.Arguments.Unnamed.Item(1)
strMin = Int(strMin)

Const intOK = 0
Const intWarning = 1
Const intCritical = 2
Const intUnknown = 3

'Début des tests
'---------------
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strFolder) Then 'Vérification si le répertoire existe

Set objFolder = objFSO.GetFolder(strFolder)
set colFiles = objFolder.Files
For Each objFile in colFiles
If DateDiff("n",objFile.DateLastModified,Now())>strMin Then
retour=retour+1
End If

Next
If retour>0 then
WScript.Echo "Fileage CRITICAL - des fichiers ont plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Tous les fichiers ont moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
Else
Wscript.Echo "Fileage Unknown - le dossier spécifie n existe pas"
Wscript.Quit(intUnknown)
End If
</script>



Je précise juste que ce sont des fichiers .bak sous format xxx_20080609xxxx.bak avec "20080609" qui est la date de création du fichier.....

Merci



A voir également:

4 réponses

delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008 1
11 juin 2008 à 09:36
il nya personne pour m'aider????
1
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
11 juin 2008 à 09:49
Quel est ton message d'erreur ?
0
delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008 1 > onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008
11 juin 2008 à 10:51
jai pas de message d'erreur.. attends je reexplique mon pb ::

Pour faire simple, je teste des fichiers dans un repertoire qui vérifie sil ya eu des sauvegardes la veille..
Or avant lorsqueun fichier de sauvegarde était crée il était supprimé le lendemain... Donc mon script que je présente ci dessous, me permettait de tester si un fichier avait plus de 24h dans le repertoire.. Et ca ca marchait bien...

Mais maintenant on a d'autre sauvegardes dans d'autres repertoires.. et je veux utiliser le meme script.. Or dans ce cas, les fichiers de sauvergarde s'accumulent.. Donc mon script là ne marche plus car, il yaura toujours un fichier qui a plus de 24h... Mais il faut que j'arrive à tester si parmi tous ces fichiers crées, il ya un fichier qui a été crée la veille pour voir si la sauvegarde de la veille a marché... c'est plus clair ?
je sais pas cmt le modifier mon script pour arriver à ca ...

<script language="VBScript">

If Wscript.Arguments.Named.Exists("h") Or Wscript.Arguments.Count = 0 Then
Wscript.Echo "Plugin help screen:"
Wscript.Arguments.ShowUsage()
Wscript.Quit(0)
End If

' Déclaration des variables et constantes
'----------------------------------------
strFolder = Wscript.Arguments.Unnamed.Item(0)
strMin = wscript.Arguments.Unnamed.Item(1)
strMin = Int(strMin)

Const intOK = 0
Const intWarning = 1
Const intCritical = 2
Const intUnknown = 3

'Début des tests
'---------------
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strFolder) Then 'Vérification si le répertoire existe

Set objFolder = objFSO.GetFolder(strFolder)
set colFiles = objFolder.Files
For Each objFile in colFiles
If DateDiff("n",objFile.DateLastModified,Now())>strMin Then
retour=retour+1
End If

Next
If retour>0 then
WScript.Echo "Fileage CRITICAL - des fichiers ont plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Tous les fichiers ont moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
Else
Wscript.Echo "Fileage Unknown - le dossier spécifie n existe pas"
Wscript.Quit(intUnknown)
End If
</script>
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120 > delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008
11 juin 2008 à 11:01
Dans ce cas tu peux peut etre faire à la place de :
 For Each objFile in colFiles
If DateDiff("n",objFile.DateLastModified,Now())>strMin Then
retour=retour+1
End If
Next

un
 For Each objFile in colFiles
If Instr(objFile.Name, DateHier) > 0 Then
retour=retour+1
End If
Next

Et tu calcules datehier à partir de la fonction Now
    annee = Year(Now)
    If Month(Now) < 10 Then
        mois = "0" & Month(Now)
    Else
        mois = Month(Now)
    End If
    If Day(Now - 1) < 10 Then
        jour = "0" & Day(Now - 1)
    Else
        jour = Day(Now - 1)
    End If
    datehier = annee & mois & jour
    MsgBox datehier
0
delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008 1 > onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008
11 juin 2008 à 11:32
Donc ca donnera à pe pres ca alors ??

Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strFolder) Then 'Vérification si le répertoire existe

Set objFolder = objFSO.GetFolder(strFolder)
set colFiles = objFolder.Files

annee = Year(Now)
If Month(Now) < 10 Then
mois = "0" & Month(Now)
Else
mois = Month(Now)
End If

If Day(Now - 1) < 10 Then
jour = "0" & Day(Now - 1)
Else
jour = Day(Now - 1)
End If
datehier = annee & mois & jour
MsgBox datehier


For Each objFile in colFiles
If Instr(objFile.Name, DateHier) > 0 Then
retour=retour+1
End If
Next


If retour>0 then
WScript.Echo "Fileage CRITICAL - des fichiers ont plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Tous les fichiers ont moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
Else
Wscript.Echo "Fileage Unknown - le dossier spécifie n existe pas"
Wscript.Quit(intUnknown)
End If



Oui mais le pb est que lorqu'il rencontre un fichier qui à plus de 24 ( datant de la veille) il passe le "retour à 1" donc du coup j'aurais le message d'erreur.. Or je voudrais qu'il passe le "retour à 1" que lorsqu'apres avoir traiter tous les fichiers il se rend compte qu'il ya aucun fichier datant dont la date est celle de la veille.. Dans le cas où il trouve au moins un seul fichier de moins de 24h il n'incrémente pas le retour.. tu vois un peu???
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120 > delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008
11 juin 2008 à 11:47
Je suis allé trop vite, si on veut vraiment la date de la veille c'est :

annee = Year(Now-1)
If Month(Now-1) < 10 Then
mois = "0" & Month(Now-1)
Else
mois = Month(Now-1)
End If

Oui mais le pb est que lorqu'il rencontre un fichier qui à plus de 24 ( datant de la veille) il passe le "retour à 1" donc du coup j'aurais le message d'erreur.. Or je voudrais qu'il passe le "retour à 1" que lorsqu'apres avoir traiter tous les fichiers il se rend compte qu'il ya aucun fichier datant dont la date est celle de la veille.. Dans le cas où il trouve au moins un seul fichier de moins de 24h il n'incrémente pas le retour.. tu vois un peu???

Le code fournit retourne 1 seulement si dans ton répertoire un fichier contient 20080610 (DateVeille)

Si je t'ai bien compris, tu voudrais que retour soit égal à 1 seulement si aucune date de fichier dans le répertoire n'a pour date celle de la veille, c'est bien ca ?
0
delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008 1
11 juin 2008 à 12:29
Oui même si il retourne 1 si dans mon repertoire un fichier contient 20080610 (DateVeille), c'est pas grave, je change juste le test au niveau de l'affichage.. Mais il fonctionne pas toujours.. et dans ce que tu ma filé j'ai essayé de modifier en fait de objFile.Name par objFile.DateLastModified
dans :
For Each objFile in colFiles
If Instr(objFile.Name, DateHier) > 0 Then
retour=retour+1
End If
Next



mais toujours un pb.. si j'ai limpression que ca vient de ce test : If Instr(objFile.Name, DateHier) > 0..

Si je comprends bien Instr(objFile.Name, DateHier) est > 0 si la date du fichier est crée apres la date DateHier qui est la date de la veille.. donc je normalement ca devrait marcher..


j'ai limpression que c'est la valeur de retour qui n'est pas tester..
Mais jessaye d'afficher avec le MsgBox retour mais j'ai un boite de dialogue vide ( aucun valeur).. C'est comme ca qu'on peut l'afficher pour sa valeur ?? ou alors faut faire autre chose??
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
11 juin 2008 à 12:41
Le test se fout complètement de la date de création ou de dernier accès du fichier, il teste simplement si dans le nom du fichier, on retrouve la séquence 20080610 car comme tu l'as indiqué dans ton premier post (et c'est de là que je suis parti), les noms des fichiers de sauvegarde ont pour structure xxx_YYYYMMDDxxx.bak.

Donc pour une date du jour égale au 11 juin 2008, je regarde simplement si un fichier est nommé xxx_20080610xxx.bak si tel est le cas, alors ca retourne 1.

Ai-je été plus clair ?
0
delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008 1 > onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008
11 juin 2008 à 13:32
ok je tai mieux compris..
Du coup j'ai pu faire une modification et ca marche normallement.. en fait voila ce que j'ai rajouté comme tu m'as dit :

For Each objFile in colFiles
If Instr(objFile.Name , dateHier) > 0 Then
retour=retour+1
Else retour=0
End If
next


donc j'ai rajouté le : Else retour=0.. sinon j'avais une valeur du retour qui était vide.. et du coup dans le tes d'affichage du resultata j'ai fait ;

If retour<1 then

WScript.Echo "Fileage CRITICAL - Le dernier fichier de sauvegarde a plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Le dernier fichier de sauvegarde a moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If



donc voila je vais bien tester dans tous les cas de figure et je te tiens au courant si jai un autre souci..

Merci de ton aide...
0
delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008 1
11 juin 2008 à 12:41
ou alors je pense que le problème vient du fait qu'il n'arrive pas peut être à bien faire la comparaison entre le Datehier et objFile.Name (ou objFile.DatelastModified)
dans If Instr(objFile.Name, DateHier) > 0.. à cause des formats.. tu penses pas ?????
0
kamal1983 Messages postés 11 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 12 juin 2008
12 juin 2008 à 12:02
Bonjour a toutes et a tous,




j'ai une fonction qui fait le lien entre vba et la table"stock" d'access,la voici :


fpubDBConnect
vpubDBRecordset.Open ("SELECT * FROM stock WHERE ID =" & CInt(txtID)), vpubDBConnection, adOpenDynamic, adLockOptimistic
With vpubDBRecordset





End With
vpubDBRecordset.Close



je veux en effet créer une commande vb qui fera le tri pour la table "stock" par ordre decroissant de la valeur du champ 1. est ce que qulqu'un sait comment résoudre ce gros probléme , je ne sais pas si il existe une solution ou pas pour ce probléme, mais moi je compte sur vos talents les amis !

merci pour votre réponse
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
12 juin 2008 à 12:05
Salut,

Ton problème n'a rien à voir avec le post dans lequel tu as laissé un message, qui de plus était marqué comme résolu.

Pour répondre, quand même à ton problème, tu peux EDIT : J'avais pas vu le flood dans les autres posts. Bon courage
0
delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008 1 > onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008
3 juil. 2008 à 11:54
Salut Onesdf,

Je reviens vers toi par rapport à mon script de tes de fichiers là.. Car j'ai un souci qu eje comprends pas trop. Je te montre en fait ce que j'vais finaliser comme script :

Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strFolder) Then 'Vérification si le répertoire existe

Set objFolder = objFSO.GetFolder(strFolder)
set colFiles = objFolder.Files
annee = Year(Now-1)

If Month(Now-1) < 10 Then
mois = "0" & Month(Now-1)
Else
mois = Month(Now-1)
End If

If Day(Now - 1) < 10 Then
jour = "0" & Day(Now - 1)
Else
jour = Day(Now - 1)
End If
datehier = annee & mois & jour
MsgBox datehier


For Each objFile in colFiles
If Instr(objFile.Name , dateHier) > 0 Then
retour=retour+1
Else retour=0
End If
MsgBox objFile.Name
Next

MsgBox retour

If retour<1 then

WScript.Echo "Fileage CRITICAL - Le dernier fichier de sauvegarde a plus de " & strMin & " Minutes"
Wscript.Quit(intCritical)
Else
WScript.Echo "Fileage OK - Le dernier fichier de sauvegarde a moins de " & strMin & " Minutes"
WScript.Quit(intOK)
End If
Else
Wscript.Echo "Fileage Unknown - le dossier spécifie n existe pas"
Wscript.Quit(intUnknown)
End If



Donc je te rafraichi l'idée en fait, Il teste si dans un repertoire il ya un fichier qui date de la veille.. Donc il me renvoit un "1" si jamais il ya un fichier crée la veille et un "o" sinon.. Par contre j'ai un beug.. Je t'explique : on a eu un pb de sauvegarde et puis on a du relancer le Job de sauvegarde donc du coup il ma crée des fichiers aujourd'hui.. Et je constate que le script ne marche plus bien...

Donc j'ai fait un test, j'ai renommé le fichier de sauvegarde d'aujourdhui pur qu'il se trouve Ce que je constate en fait, c'est qu'il se trouve comme le premier fichier par son nom( où qu'il ne soit pas dernier fichier).. Et là le script fonctionne.. Et quand il se trouve dernier fichier il me met une erreur.. Donc je constate que il applique son test
If Instr(objFile.Name , dateHier) que sur le dernier fichier qu'il traite et si celui est différenet de la date de la veille là il renvoie une erreur... Je sais pas si j'ai pu me faire comprendre... Essaye de me donneer d'autres idées stp.. A Mon avis ca vient de ce test là... En d'autres termes il garde le resultat du dernier fichier qu'il traite et il oublie les autres fichiers...

Merci
0
delawood > delawood Messages postés 14 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 3 juillet 2008
7 juil. 2008 à 15:26
Il nya personne pour m'aider ????
0