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 :

Monitorer la réplication NTDS à l'aide de VBS


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Par défaut Monitorer la réplication NTDS à l'aide de VBS
    Bonjour à tous,

    N'étant pas très bon en développement je me permet de venir vers vous car après plusieurs heure de recherche je n'arrive au résultat souhaité.

    Mon script à pour but de lancer la commande repadmin /showrepl /csv > repertoir/fichier.csv, afin de sortir le résultat CSV dans un répertoire.

    Puis dans un second temps convertir le CSV dans un tableau et rechercher la valeur ayant le non de serveur souhaiter et pointer vers la date de réussite ou échec.

    Cela permettra de monitorer la réplication ntds.

    Voici ce que j'ai déja réussi a coder :

    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
    Option Explicit
    On Error Resume Next
     
    Dim oFSO, NtdsFail
    Dim file_name, file_test
    Dim result_array()
    Dim oshell
    Dim fso
     
    Const ForReading = 1
     
    '==============================================================
    '==	Génération du fichier CSV à analyser
    '==============================================================
     
    Set oshell = WScript.Createobject ("wscript.shell")
    oshell.run "cmd.exe /c repadmin /showrepl /csv>c:\zabbix\repl_NTDS.csv"
    Set oShell = Nothing
     
    Wscript.Sleep 3000 
     
    Set oFSO = CreateObject("scripting.FilesystemObject")
    Set file_name = oFSO.GetFile("c:\zabbix\replNTDS.csv")
    Set NtdsFail = oFSO.OpenTextFile ("c:\zabbix\replNTDS.csv", ForReading)
     
    '==============================================================
    '==	test d'existance de fichier csv'
    '==============================================================
     
     
    'Create Condition
    If (oFSO.FileExists("c:\zabbix\replNTDS.csv")) Then
    	'Alert User
    	WScript.Echo("File exists!")
    	'WScript.Quit()
    Else
    	'Alert User
    	WScript.Echo("File does not exist!")
    	'Exit Script
    	WScript.Quit()
    End If
     
     
    '==============================================================
    '==	Fonction pour analyse CSV
    '==============================================================
     
     
     Do while NtdsFail.AtEndOfStream <> True
     
    		Wscript.Echo "test"
    		If inStr(NtdsFail.Readline,",") Then
    		result_array = Split(NtdsFail.ReadLine,",")
     
    		For i = 0 To UBound(result_array) 	
    		If result_array(5) = "nom_du_serveur_AD" Then
    			Wscript.Echo resul_array(9)	
     
    		Next
    		End If
     
     
    Exit Do	
    Loop
    NtdsFail.Close
    Ce d'ont j'ai l'impression c'est que ma fonction pour implanter le CSV dans un tableau ne fonctionne pas.
    Je n'arrive pas à trouver ou je me plante.

    Merci par avance, de l'aide que vous voudriez bien m'apporter.

    Cordialement,

    Cthulhu88

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut, bienvenue sur DVP

    Il y a une erreur dans la boucle For .... Next
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Do While NtdsFail.AtEndOfStream <> True
        Wscript.Echo "test"
        If InStr(NtdsFail.ReadLine, ",") Then
            result_array = Split(NtdsFail.ReadLine, ",")
     
            For i = 0 To UBound(result_array)
                If result_array(5) = "nom_du_serveur_AD" Then
                    Wscript.Echo resul_array(9)
                End If  ' <----------- il manquait ce End If
            Next
     
        End If
        Exit Do
    Loop
    Currieux que le code ne produisait pas une erreur, à moins qu'un On Error Goto existe ailleurs dans le code que tu nous soumets.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Par défaut Monitorer la réplication NTDS à l'aide de VBS
    Bonjour,

    Merci ProgElecT, pour cette réponse rapide.
    En effet il manquait le End If que j'avais du malencontreusement supprimé lorsque j'ai intégré mon code au forum.

    La grande question que je me pose c'est :

    comment savoir si mon programme découpe bien mon fichier CSV ?

    Car en modifiant mon script pour y rajouter un Wscript.Echo result_array(5) il ne m'affiche absolument rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Do While NtdsFail.AtEndOfStream <> True
        Wscript.Echo "test"
        If InStr(NtdsFail.ReadLine, ",") Then
            result_array = Split(NtdsFail.ReadLine, ",")
                    Wscript.Echo resul_array(5) '<------------ Ligne rajouter pour tester affichage du tableau
            For i = 0 To UBound(result_array)
                If result_array(5) = "nom_du_serveur_AD" Then
                    Wscript.Echo resul_array(9)
                End If  
            Next
     
        End If
        Exit Do
    Loop
    Rien ne ce passe, aucun affichage de la valeur.

    Dans mon premier poste j'ai vraiment mis tout mon code.
    Je pense que le problème viens du fait que je ne sais pas traiter le CSV pour qu'il me l'enregistre dans mon tableau.

    En cherchant sur le forum et sur d'autre site internet, au sujet du traitement de CSV vers un tableau, je me retrouve souvent face à des bout de code sans explication, et comme j'ai des lacune en développement je n'arrive pas forcément à les comprendre.

    Ci-joint mon fichier CSV pouvant peut-être vous orienter, sur mes erreurs de développement.

    Et merci encore.

    Cdt,

    Cthulhu88
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut

    A essayer
    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
    Dim oFSO, NtdsFail, I
    Dim file_name, file_test
    Dim result_array    '()<---------- NON ----------
    Dim oshell
    Dim fso
     
    Const ForReading = 1
     
    '==============================================================
    '== Génération du fichier CSV à analyser
    '==============================================================
     
    Set oshell = Wscript.CreateObject("wscript.shell")
    ' oshell.run "cmd.exe /c repadmin /showrepl /csv>c:\zabbix\repl_NTDS.csv"  < ---------- par la suite le nom change ????
    oshell.run "cmd.exe /c repadmin /showrepl /csv>c:\zabbix\replNTDS.csv"
    Set oshell = Nothing
     
    Wscript.Sleep 3000
     
    Set oFSO = CreateObject("scripting.FilesystemObject")
    'Set file_name = oFSO.GetFile("c:\zabbix\replNTDS.csv") '<---------- A quoi cela sert il ????
     
    '==============================================================
    '== test d'existance de fichier csv'
    '==============================================================
     
     
    'Create Condition
    If (oFSO.FileExists("c:\zabbix\replNTDS.csv")) Then
        'Alert User
        'Wscript.Echo ("File exists!")
        'WScript.Quit()
    Else
        'Alert User
        Set oFSO = Nothing
        Wscript.Echo ("File does not exist!")
        'Exit Script
        WScript.Quit()
    End If
     
    Set NtdsFail = oFSO.OpenTextFile("c:\zabbix\replNTDS.csv", ForReading)
     
    '==============================================================
    '== Fonction pour analyse CSV
    '==============================================================
     
     Dim Lut, Trouver
     Do While NtdsFail.AtEndOfStream <> True
            'Wscript.Echo "test"
            Lut = NtdsFail.ReadLine
            If InStr(Lut, ",") Then
                    result_array = Split(Lut, ",")
                    For I = 0 To UBound(result_array)
                            If result_array(5) = "nom_du_serveur_AD" Then
                                    Wscript.Echo resul_array(9)
                                    Trouver = True
                                    Exit Do
                            End If
                    Next
            End If
    Loop
     
    NtdsFail.Close
    Set NtdsFail = Nothing
    Set oFSO = Nothing
     
    If Trouver = True then
            Msgbox "Bon"
            Else
            Msgbox "Pas bon"
    End If
    Dans le fichier ZIP, nom_du_serveur_AD n'est pas présent, donc on a forcément le MsgBox Pas bon
    Précision, à chaque ReadLine le pointeur passe à la ligne suivante, si on l'utilise dans une ligne If .... le prochain result_array = Split(NtdsFail.ReadLine, ",") n'est plus la condition du If
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Par défaut Monitorer la réplication NTDS à l'aide de VBS
    Salut,

    Tous d'abord Merci beaucoup
    J'ai enfin réussi grâce à vos conseille et direction à réaliser ce que je souhaitais.
    ci-dessous le code qui pourra servir à d'autre personne voulant un monitoring de réplication NTDS par nom de serveur.

    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
    '==========================================================================
    ' repl_NTDS.vbs
    '
    ' 2013/11/19
    ' Nicolas Provost
    '
    ' TEST if ntds replication failed.
    '
    '==========================================================================
     
    Dim oFSO, NtdsFail
    Dim file_name, file_test
    Dim oshell
    Dim fso
    Dim Lut, Lut_temp, Server, server_name, last_success_time
    Dim converted_time, diff
     
    Const ForReading = 1
     
    '==============================================================
    '==	Génération du fichier CSV à analyser
    '==============================================================
     
    Set oshell = WScript.Createobject ("wscript.shell")
    oshell.run "cmd.exe /c repadmin /showrepl /csv>c:\zabbix\repl_NTDS.csv"								    '<----------- Attention au répertoir que vous précisez
    Set oShell = Nothing
     
    Wscript.Sleep 3000 																					    'Attente pour que le script se crée ( valeur en seconde )
     
    Set oFSO = CreateObject("scripting.FilesystemObject")
    Set NtdsFail = oFSO.OpenTextFile ("c:\zabbix\repl_NTDS.csv", ForReading)									'<----------- Attention au répertoir que vous précisez
     
    '==============================================================
    '==	test d'existance de fichier csv'
    '==============================================================
    'Set Object
    'Set fso = CreateObject("Scripting.FileSystemObject")
     
     
     
    'Create Condition
    REM If (oFSO.FileExists("d:\Bureau\replNTDS.csv")) Then
    	REM 'Alert User
    	REM WScript.Echo("File exists!")
    	REM 'WScript.Quit()
    REM Else
    	REM 'Alert User
    	REM WScript.Echo("File does not exist!")
    	REM 'Exit Script
    	REM WScript.Quit()
    REM End If
     
     
    '==============================================================
    '==	Fonction pour analyse CSV
    '==============================================================
     
     
     diff = 0
    																											'Initialisation de la lecture du fichier CSV 
     Do While NtdsFail.AtEndOfStream <> True
            Lut = NtdsFail.ReadLine	
    																											'Condition : si dans la ligne on tombe sur des guillemet on slip la ligne
    		If InStr(Lut, """") Then
    			Lut_temp = Split(Lut, """")
    																											'On reprend cette nouvelle ligne a partir de la position 2 pour respliter si on tombe sur des virgules.
    			Server = Split (Lut_temp(2), ",")
    			server_name = Server(2)																			'le serveur sera donc en position 2
    			last_success_time = Server(6)           														'la date de la dernière bonne réplication sera donc en position 6
    		else
    																											'Sinon On split directement sur les virgules
    			Server = Split (Lut, ",")
    			server_name = Server(5)                 														'le serveur sera donc en position5
    			last_success_time = Server(9)           														'la date de la dernière bonne réplication sera donc en position 9
    		end if
     
    		REM Wscript.Echo "server_name: "+server_name
    		If server_name = "ADtestDC" Then																	'Condition : si la variable à pour valeur le nom de serveur voulu alors
     
    				REM Wscript.Echo "server found, last success time: "+last_success_time
    				converted_time = CDate(last_success_time)													'On converti le temps de la derniére bonne réplication
    				diff = Datediff("n", converted_time, Now())													'Puis on compare la différence de temps entre la réplication est maintenant, différence calculé en minute. On enregistrant le résultat dans une variable. 
    				REM Wscript.Echo "last success time: " & last_success_time & vblf & "Now: " & Now() &vblf & "converted_time: " & converted_time &vblf & "DateDiff: " & diff
    				Exit Do																						'On arrete la boucle
    		End If
    Loop
     
    NtdsFail.Close
    Set NtdsFail = Nothing
    Set oFSO = Nothing
     
    '==============================================================
    '==	Code retourné pour l'utilisation de ZABBIX
    '==============================================================
     
     
    If diff > 120 then																							'Condition : Si la difference et supérieur à 120 MIN par exemple alors 
    		X = 1																								'La variable X passe a 1 Déclenchant une alerte(utiliser par Zabbix)
            REM Msgbox "Pas Bon, la replication est plus vieille que 2h"											
    Else
            REM Msgbox "Bon"																						
    		X = 0																								'Sinon la variable X reste a 0 aucun déclanchement.
    End If
     
    Wscript.Echo X
    Le principe est de ressortir un code 0 ou 1 en fonction de la différence de temps, entre la date et heure actuelle et la date de la dernière réplication réussis.

    Pour voir le "statut" des réplication on peut lancer sur un serveur Active directory la commande : repadmin /showrepl dans l'invite de commande.

    Mon script lance cette commande avec le paramétre /csv >chemin/nom.csv
    pour sortir ce résultat dans un fichier csv, puis il découpe ce fichier csv pour le stocker dans un tableau.
    Ensuite, il va chercher la valeur qui correspond à un nom de serveur AD qui ce réplique avec le serveur sur lequel vous lancez le script et sort l'heure de sa dernière bonne réplication.

    Enfin il fait la différence entre la date et heure actuelle et la date et heure de la dernière réplication réussis. Différence calculer en minute grâce à l'option : "n" . On définie un seuil selon le paramètrage de réplication. Le reste ce passe dans Zabbix ou autre ....

    Cordialement,

    Cthulhu88

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. De l'aide sur vbs
    Par deidoboy78 dans le forum VBScript
    Réponses: 10
    Dernier message: 05/08/2011, 15h36
  2. Aide Sauvegarde VBS
    Par Azame dans le forum VBScript
    Réponses: 4
    Dernier message: 19/11/2009, 12h00
  3. aide simplifié VBS
    Par al777 dans le forum VBScript
    Réponses: 2
    Dernier message: 30/03/2007, 00h39
  4. Aide Tableau vbs
    Par Travailleuuse06 dans le forum ASP
    Réponses: 2
    Dernier message: 29/12/2005, 14h01
  5. Aide sur la réplication
    Par IADJOFOGUE dans le forum Réplications
    Réponses: 1
    Dernier message: 10/07/2005, 22h04

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