IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

[VBS] script qui récupère les informations sur un filesystem


Sujet :

VBScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 31
    Points : 28
    Points
    28
    Par défaut [VBS] script qui récupère les informations sur un filesystem
    Bonjour,

    Pourriez vous m'aider, j'ai fais un script en VBS, qui me permettrait de récuperer les infos 'un filesystem, script que je souhaite exécuter sur un server windows 2000. Mais cela ne marche pas. J'ai besoin de votre aide. ci-joint, le script en entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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>&nbsp;" & 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>&nbsp;" & 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

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par Kasanova75
    Mais cela ne marche pas.
    Et on doit deviner ce qui ne marche pas?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 31
    Points : 28
    Points
    28
    Par défaut
    Desolé, ce qui ne marche pas, c'est que je reçois bien le mail sans les infos sur les fichiers et répertoire. J'ai comme l'impression que les réepertoires ne sont pas analysé.

Discussions similaires

  1. Réponses: 64
    Dernier message: 17/02/2017, 21h55
  2. Réponses: 3
    Dernier message: 01/07/2012, 15h57
  3. Réponses: 3
    Dernier message: 10/04/2009, 13h26
  4. Script qui liste les repertoires donnant des liens sur les fichiers
    Par PsYKrO dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 22
    Dernier message: 27/03/2008, 08h46
  5. script qui explore les sous-répertoire ?
    Par farenheit dans le forum Flash
    Réponses: 9
    Dernier message: 20/07/2005, 12h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo