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:
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.:cry:
Merci par avance, de l'aide que vous voudriez bien m'apporter.
Cordialement,
Cthulhu88
1 pièce(s) jointe(s)
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:
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
Monitorer la réplication NTDS à l'aide de VBS
Salut,
Tous d'abord Merci beaucoup :ccool:
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:
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