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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308
| -----------------------------------------------------
'Script qui récupère des informations sur le FS
'Constante de script
Const SFSO = "Scripting.FileSystemObject", WSS = "Wscript.Shell", MSWS = "mswinsock.winsock"
'Constante pour l'ouverture des fichiers
Const ForReading = 1, ForWriting = 2, ForAppending = 8
'Répertoire qui contient les FS
Const S_FS_DIRECTORY = "C:\testFS\"
'Const S_FS_DIRECTORY = "I:\_DataApplications\rcfrance\rcsiebel\"
'Paramètres d'envoi de mail
Const S_REMOTE_HOST = "wsmtp.toto.fr"
Const S_REMOTE_PORT = "25"
S_MAIL_RCPT = "rcpt to:test@toto.com"
'Pour pouvoir mettre plusieurs destinataire au mail, il faut les séparer par des virgules comme
'dans l'exemple ci-dessous :
'S_MAIL_RCPT = "rcpt to:guy.agbre-renexter@renault.com,olivier.guennec-renexter@renault.com"
'Fichier de données des différents FS
Const S_FILE_SYNCHRO = "c:\temp\synchro.dat"
Const S_FILE_RECENT = "c:\temp\recent.dat"
Const S_FILE_SIEBELFS = "c:\temp\siebelfs.dat"
'Contenu du mail
Dim sMailData
'Création de l'en-tête du mail
sMailData = "<!doctype html public ""-//w3c//dtd html 4.0 transitional//en"">" & vbcrlf & _
"<html>" & vbcrlf & _
"<b><i><u>Synthèse du file system du " & Now & "</u></i></b>" & vbcrlf & _
"<p>" & vbcrlf & _
"<hr WIDTH=""100%"">" & vbcrlf & _
"<br> " & vbcrlf
'On récupère les informations sur le FS et on les met dans les fichiers de données
'get_fs_info
'On analyse le fichier de données du répertoire Synchro
sMailData = sMailData & "<b>Analyse du répertoire Synchro</b>" & vbcrlf
analyse_data S_FILE_SYNCHRO
'On analyse le fichier de données du répertoire Recent
sMailData = sMailData & "<b>Analyse du répertoire Recent</b>" & vbcrlf
analyse_data S_FILE_RECENT
'On analyse le fichier de données du répertoire SiebelFS
sMailData = sMailData & "<b>Analyse du répertoire SiebelFS</b>" & vbcrlf
analyse_data S_FILE_SIEBELFS
'Création de la fin du mail
sMailData = sMailData & "</html>" & vbcrlf
'Envoi d'un mail de synthèse
envoi_mail
'-----------------------------------------------------------------------------------------------------
'---------------------------- Code des fonctions et procédures utilisées -----------------------------
'-----------------------------------------------------------------------------------------------------
'Procédure qui lance une commande DOS et attend qu'elle se termine
Sub lance_dos(vsCommande)
'Objet shell
Dim oShell
'Création de l'objet shell
Set oShell = WScript.CreateObject(WSS)
'Lancement de la commande passée en paramètre.
'On attend que la commande soit terminée pour passer à la suite du code
'La commande est lancée en arrière-plan
oShell.Run "command /c " & vsCommande, 0, True
'Libération de la mémoire
Set oShell = Nothing
End Sub
'Procédure qui récupère des informations sur le FS.
'Cette fonction effectue un dir sur l'ensemble des répertoires du FS.
'Elle ramène les noms de fichier (8.3 et complet), les tailles, les
'dates de modification et d'accès de tous les fichiers du FS
Sub get_fs_info
'Objet fichier, répertoire
Dim oFSO, oSiebelFSFolder, oSiebelFSFolderList, oSiebelFSCurrentFolder
'Création de l'objet FileSystem
Set oFSO = Wscript.CreateObject(SFSO)
'Lancement de la recherche sur le répertoire synchro
lance_dos "dir /v " & S_FS_DIRECTORY & "Synchro\*.SAF > " & S_FILE_SYNCHRO
'Lancement de la recherche sur le réperoire Recent
lance_dos "dir /v " & S_FS_DIRECTORY & "Recent\*.SAF > " & S_FILE_RECENT
'Lancement de la recherche sur le réperoire Siebelfs
'On récupère les sous-répertoires du répertoire siebelfs
Set oSiebelFSFolder = oFSO.GetFolder(S_FS_DIRECTORY & "Siebelfs")
Set oSiebelFSFolderList = oSiebelFSFolder.SubFolders
'On vide le fichier de données siebelfs.dat
lance_dos "echo. > " & S_FILE_SIEBELFS
'Pour chaque sous-répertoire
For Each oSiebelFSCurrentFolder in oSiebelFSFolderList
'On affiche le contenu dans le fichier de données
lance_dos "dir /s /v " & S_FS_DIRECTORY & "Siebelfs\" & oSiebelFSCurrentFolder.name & _
"\*.SAF >> " & S_FILE_SIEBELFS
Next
'Libération de la mémoire
Set oSiebelFSFolder = Nothing
Set oSiebelFSFolderList = Nothing
Set oSiebelFSCurrentFolder = Nothing
Set oFSO = Nothing
End Sub
'Procédure qui va traiter le fichier passé en paramètre et en tirer des données intéressantes.
' - le nombre de fichiers
' - le fichier le plus récent
' - le fichier le plus ancien
' - la taille du répertoire
Sub analyse_data(vsFile)
'Constante de position et de longueur des données dans le fichier de données.
Const I_POS_SIZE = 14
Const I_LEN_SIZE = 13
Const I_POS_YEAR = 49
Const I_POS_MONTH = 46
Const I_POS_DAY = 43
'Objets fichier
Dim oFSO, oFile
'date max, date min, nombre de fichiers, taille de l'ensemble des fichiers
Dim iDateMax, iDateMin, iNbFiles, iFileSize
'Ligne en cours, Date en cours
Dim sCurrentLine, iCurrentDate
'Date min ou max au format string
Dim sDate
'Création de l'objet FileSystem
Set oFSO = Wscript.CreateObject(SFSO)
'Ouverture du fichier de données passé en paramètre
Set oFile = oFSO.OpenTextFile(vsFile, ForReading, True)
'Initialisation des variables
iNbFiles = 0
'Tant qu'on n'arrive pas à la fin du fichier de données
Do While Not oFile.AtEndOfStream
'On lit la ligne courante
sCurrentLine = oFile.ReadLine
'On vérifie qu'il s'agit d'un fichier SAF
If UCase(Right(sCurrentLine,4)) = ".SAF" Then
'Si c'est le premier passage
If iNbFiles = 0 Then
'On initialise la date max
iDateMax = CLng(Mid(sCurrentLine, I_POS_YEAR, 2) & _
Mid(sCurrentLine, I_POS_MONTH, 2) & _
Mid(sCurrentLine, I_POS_DAY, 2))
'On initialise la date min
iDateMin = iDateMax
'On initialise le nombre de fichiers
iNbFiles = 1
'On initialise la taille de l'ensemble des fichiers
iFileSize = CLng(Mid(sCurrentLine, I_POS_SIZE, I_LEN_SIZE))
'Si ce n'est pas le permier passage
Else
'On récupère la date de la ligne en cours
iCurrentDate = CLng(Mid(sCurrentLine, I_POS_YEAR, 2) & _
Mid(sCurrentLine, I_POS_MONTH, 2) & _
Mid(sCurrentLine, I_POS_DAY, 2))
'On vérifie si c'est la date max ou la date min
If iCurrentDate > iDateMax Then
iDateMax = iCurrentDate
ElseIf iCurrentDate < iDateMin Then
iDateMin = iCurrentDate
End If
'On incrémente le nombre de fichier
iNbFiles = iNbFiles + 1
'On calcule la taille de l'ensemble des fichiers
iFileSize = iFileSize + CLng(Mid(sCurrentLine, I_POS_SIZE, I_LEN_SIZE))
End If
End If
'On passe à la ligne suivante
Loop
'Fermeture du fichier de log
oFile.Close
'Libération de la mémoire
Set oFile = Nothing
Set oFSO = Nothing
'Affichage du résultat dans le mail sous forme d'un tableau
sMailData = sMailData & "<table BORDER BGCOLOR=""#CCCCCC"" >" & vbcrlf
sDate = Right("0" & iDateMax,6)
sMailData = sMailData & "<tr><td>Date de modification la plus récente</td><td>" & Mid(sDate, 5, 2) & "/" & Mid(sDate, 3, 2) & "/" & Mid(sDate, 1, 2) & "</td></tr>" & vbcrlf
sDate = Right("0" & iDateMin,6)
sMailData = sMailData & "<tr><td>Date de modification la plus ancienne</td><td>" & Mid(sDate, 5, 2) & "/" & Mid(sDate, 3, 2) & "/" & Mid(sDate, 1, 2) & "</td></tr>" & vbcrlf
sMailData = sMailData & "<tr><td>Nombre de fichiers du répertoire</td><td>" & iNbFiles & "</td></tr>" & vbcrlf
sMailData = sMailData & "<tr><td>Taille du répertoire</td><td>" & iFileSize & "</td></tr>" & vbcrlf
sMailData = sMailData & "</table>" & vbcrlf
sMailData = sMailData & "<br> " & vbcrlf
End Sub
'Procédure qui envoie un mail de synthèse sur le FS
Sub envoi_mail
'Objets socket
Dim oSck
'Compteur
Dim i
'Création de l'objet socket
Set oSck = CreateObject(MSWS)
'Initialisation des paramètres de connexion
oSck.RemoteHost = S_REMOTE_HOST
oSck.RemotePort = S_REMOTE_PORT
'Connexion au serveur de mail
oSck.Connect
'Attente de réponse du serveur de mail
VAR_1 = oSck.State
While(oSck.State <> 7 And i < 1000)
WScript.Sleep 10
i=i+1
Wend
'Si la connexion est KO
If i >= 1000 Then
'Affichage d'un message d'erreur dans le fichier de logs
write_log "Connection time out (State = " & oSck.State & "/" & VAR_1 & ")."
'Sinon
Else
'Envoi du mail
oSck.SendData( "helo renault.fr" & vbcrlf & _
"mail from:synthese.filesystem@renault.fr" & vbcrlf & _
S_MAIL_RCPT & vbcrlf & _
"data" & vbcrlf & _
"Subject:Synthèse FileSystem" & vbcrlf & _
"Content-type: text/html; charset=""iso-8859-15""" & vbcrlf & _
sMailData & _
"." & vbcrlf & _
"quit")
VAR_2 = oSck.State
'Attente de réponse du serveur de mail
While(oSck.State <> 7 And i < 1000)
WScript.Sleep 10
i=i+1
Wend
'Si l'envoi de mail est OK
If i < 1000 Then
'Affichage d'un message d'information dans le fichier de logs
write_log "Message envoyé (State = " & oSck.State & "/" & VAR_1 & "/" & VAR_2 & ")."
'Sinon
Else
'Affichage d'un message d'erreur dans le fichier de logs
write_log "Erreur lors de l'envoi du message. (State = " & oSck.State & "/" & VAR_1 & "/" & VAR_2 & ")."
End If
'pause de 5 secondes pour que le message est le temps d'être envoyé avant la fermeture de la socket.
WScript.Sleep 5000
End If
'Fermeture de la socket
oSck.Close
'Libération de la mémoire
Set oSck = Nothing
End Sub
'Procédure qui affiche une ligne dans le fichier de log.
'Cette ligne est précédée de la date et de l'heure de l'ajout de la ligne.
Sub write_log(vsLine)
'Nom du fichier de log
Dim oFSO, oFileLog
'Création de l'objet FileSystem
Set oFSO = Wscript.CreateObject(SFSO)
'Ouverture du fichier de log
Set oFileLog = oFSO.OpenTextFile(oFSO.GetParentFolderName(Wscript.ScriptFullName) & "\" & oFSO.GetBaseName(Wscript.ScriptFullName) & ".log", ForAppending, True)
'Insertion de la ligne dans le fichier de log
oFileLog.WriteLine Now & vbTab & vsLine
'Fermeture du fichier de log
oFileLog.Close
'Libération de la mémoire
Set oFileLog = Nothing
Set oFSO = Nothing
End Sub |
Partager