VBS : Envoi de mail si double condition remplie
Résolu
YLK
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
YLK Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
YLK Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je fais appel à vous car j'ai un petit problème avec la conception d'un script VBS.
Voilà, j'essaie en fait de concevoir un script VBS qui, via une tache planifiée Windows, check le contenu d'un dossier sur un serveur à intervalles réguliers (toutes les 1 ou 2 heures).
Dans ce dossier, il y a constamment des fichiers de plusieurs types. Je voudrais donc qu'il se concentre sur les fichiers d'un certains types et qu'il contrôle ensuite leur date et heure de modification.
En effet, ces fichiers sont déposés là via un traitement automatisé toutes les 30 minutes. Je désirerais en fait recevoir une alerte mail si tous ces fichiers sont âgés de plus de 30 minutes afin de déceler rapidement si un problème de traitement a eu lieu.
Pour l'instant tout ce que je viens de vous expliquer fonctionne à peu près dans mon script actuel, le seul petit hic c'est que j'utilise la fonction "For Each" et du coup, il m'envoie un mail PAR fichier datant de plus de 30 minutes.... Et comme il existe un nombre important de ces fichiers dans le dossier... Hors je ne voudrais recevoir qu'un seul mail d'alerte par exécution du script...
De plus, je ne sais pas encore comment intégrer ma variable "nomfichier" pour que mon VBS centre son action sur ces seuls fichiers dans le dossier (j'ai essayé de l'ajouter au "If" avec un "And" mais ça ne marche pas).
Mes connaissances en VBS étant relativement limitées, auriez-vous idée de la fonction à utiliser à la place de For Each et aussi de la méthode pour filtrer l'action sur les fichiers nommés "AC*.EDI" ?
Voici le script en question :
strFolder = "D:\Chemin d'accès du dossier\"
nomfichier = "AC*.EDI"
Dim objFile
Set objFSO = CreateObject("Scripting.FileSystemObject" )
Set objFolder = objFSO.GetFolder(strFolder)
Set colFiles = objFolder.Files
For Each objFile In colFiles
If DateDiff("N",objFile.DateLastModified,Now()) > 30 Then
With CreateObject("CDO.Message")
.From="Integration@mon-entreprise.com"
.To="service.info@mon-entreprise.com"
.CC=""
.Subject="Erreur d'integration"
.TextBody="Bonjour," & Chr(13) & "Une potentielle erreur de traitement dans l'intégration des commandes été détectée." & Chr(13) & "Il semblerait qu'il n'y ait pas eu d'intégration de commandes depuis plus de 30 minutes. " & Chr(13) & "Cordialement"
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mon-entreprise.com"
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Configuration.Fields.Update
On Error Resume Next
.Send
If Err.Number <>0 Then
MsgBox Err.Description,16,"Erreur"
End If
On Error GoTo 0
End With
End If
Next
Je fais appel à vous car j'ai un petit problème avec la conception d'un script VBS.
Voilà, j'essaie en fait de concevoir un script VBS qui, via une tache planifiée Windows, check le contenu d'un dossier sur un serveur à intervalles réguliers (toutes les 1 ou 2 heures).
Dans ce dossier, il y a constamment des fichiers de plusieurs types. Je voudrais donc qu'il se concentre sur les fichiers d'un certains types et qu'il contrôle ensuite leur date et heure de modification.
En effet, ces fichiers sont déposés là via un traitement automatisé toutes les 30 minutes. Je désirerais en fait recevoir une alerte mail si tous ces fichiers sont âgés de plus de 30 minutes afin de déceler rapidement si un problème de traitement a eu lieu.
Pour l'instant tout ce que je viens de vous expliquer fonctionne à peu près dans mon script actuel, le seul petit hic c'est que j'utilise la fonction "For Each" et du coup, il m'envoie un mail PAR fichier datant de plus de 30 minutes.... Et comme il existe un nombre important de ces fichiers dans le dossier... Hors je ne voudrais recevoir qu'un seul mail d'alerte par exécution du script...
De plus, je ne sais pas encore comment intégrer ma variable "nomfichier" pour que mon VBS centre son action sur ces seuls fichiers dans le dossier (j'ai essayé de l'ajouter au "If" avec un "And" mais ça ne marche pas).
Mes connaissances en VBS étant relativement limitées, auriez-vous idée de la fonction à utiliser à la place de For Each et aussi de la méthode pour filtrer l'action sur les fichiers nommés "AC*.EDI" ?
Voici le script en question :
strFolder = "D:\Chemin d'accès du dossier\"
nomfichier = "AC*.EDI"
Dim objFile
Set objFSO = CreateObject("Scripting.FileSystemObject" )
Set objFolder = objFSO.GetFolder(strFolder)
Set colFiles = objFolder.Files
For Each objFile In colFiles
If DateDiff("N",objFile.DateLastModified,Now()) > 30 Then
With CreateObject("CDO.Message")
.From="Integration@mon-entreprise.com"
.To="service.info@mon-entreprise.com"
.CC=""
.Subject="Erreur d'integration"
.TextBody="Bonjour," & Chr(13) & "Une potentielle erreur de traitement dans l'intégration des commandes été détectée." & Chr(13) & "Il semblerait qu'il n'y ait pas eu d'intégration de commandes depuis plus de 30 minutes. " & Chr(13) & "Cordialement"
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mon-entreprise.com"
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Configuration.Fields.Update
On Error Resume Next
.Send
If Err.Number <>0 Then
MsgBox Err.Description,16,"Erreur"
End If
On Error GoTo 0
End With
End If
Next
A voir également:
- VBS : Envoi de mail si double condition remplie
- Vbs windows - Accueil - Optimisation
- Vbs - Télécharger - Édition & Programmation
- Vbs editor - Télécharger - Édition & Programmation
- Fichier vbs ✓ - Forum Virus
- Vbs malware gen ✓ - Forum Virus
1 réponse
Re !
Je viens de trouver la solution à mon problème.
Je partage le code pour les personnes intéressées :
Topic en état "résolu". :)
Je viens de trouver la solution à mon problème.
Je partage le code pour les personnes intéressées :
Option Explicit Dim objArrayList Set objArrayList = CreateObject("System.Collections.ArrayList") Call CheckFiles("D:\Test\","AC","EDI",30) If objArrayList.Count <> 0 Then Call SendMail() Set objArrayList = Nothing '############################################################# Sub CheckFiles(argPath,argFile,argExt,argTime) Dim objFso, objFile Set objFso = CreateObject("Scripting.FileSystemObject") If objFso.FolderExists(argPath) Then For Each objFile In objFso.GetFolder(argPath).Files If DateDiff("n", objFile.DateLastModified, Now) < argTime And _ Left(objFile.Name,2) = argFile And _ UCase(objFso.GetExtensionName(objFile.Name)) = argExt Then WScript.Quit Else objArrayList.Add objFile.DateLastModified & Space(3) & objFile.Path End If Next End If objArrayList.Sort objArrayList.Reverse Set objFso = Nothing End Sub '############################################################# Sub SendMail() Dim strBody strBody = "Bonjour," & Chr(13) & Chr(13) &_ "Une potentielle erreur de traitement dans l'integration " &_ "des commandes a ete detectee." & Chr(13) &_ "Il semblerait qu'il n'y ait pas eu d'integration de commandes " &_ "depuis plus de 30 minutes." & Chr(13) &_ "Hors le traitement a lieu toutes les demi-heure." & Chr(13) & Chr(13) &_ "Le fichier le plus recent sur " &_ "D:\Test est :" & Chr(13) & objArrayList(0) & Chr(13) & Chr(13) & "Cordialement" With CreateObject("CDO.Message") .From = "integration@mon-entreprise.com" .To = "mon-mail@mon-entreprise.com" .CC = "" .Subject = "Erreur d'integration des commandes AC sur le serveur" .TextBody= strBody .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mon-entrepise.com" .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .Configuration.Fields.Update On Error Resume Next .Send 'If Err.Number <> 0 Then MsgBox Err.Description,16,"Erreur" On Error GoTo 0 End With End Sub
Topic en état "résolu". :)