Bonjour,
Le script ci-dessous recherche les doublons de numéros de radiomessagerie (Pager) déclarés pour tous les utilisateurs dans l'AD.
En cas de doublon les informations des utilisateurs concernés sont affichées dans un même MsgBox, jusque-là tous va bien.
Mon souci est lorsqu'un numéro de radiomessagerie et attribué a plus de deux utilisateurs, les infos ne sont pas afficher dans le même MsgBox.
Si par exemple trois utilisateurs on le même numéro un premier MsgBox m'affiche les deux premiers utilisateurs et un second MsgBox m'affiche les trois.
Pouvez-vous m'aider?
Bien Cordialement

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
' DuplicatePagers.vbs
' 
' Recherche des numméros de radiomessagerie "pager" non unique dans Active Directory.
'
' ----------------------------------------------------------------------
'
'Ce VBScript utilise ADO pour rechercher dans Active Directory les objets utilisateur. 
'Le jeu d’enregistrements est trié par numéros de radiomessagerie et les valeurs en double sont de sortie.
'Ce VBScript est conçu pour s’exécuter avec  l'invite de commandes "hôte Cscript". 
'La sortie peut être redirigée vers un fichier texte. Par exemple :
'cscript //nologo DuplicatePagers.vbs > Duplicates.txt
 
 
Option Explicit
 
Dim objRootDSE, strDNSDomain, adoCommand, adoConnection, strQuery
Dim adoRecordset, strPager, strPreviousPager, strDN, strPreviousPath, strResult
Dim blnFlag, strBase, strFilter, strAttributes
 
' Déterminer le nom de domaine DNS de l’objet RootDSE.
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
 
' Utilisation d’ADO pour rechercher dans Active Directory.
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection
 
' Recherchez tous les objets utilisateur. 
' retourne le nom d'utilsateur et le N° de radiomessagerie.
' Rapport de tri mis par N°.
strBase = "<LDAP://" & strDNSDomain & ">"
strFilter = "(&(objectCategory=person)(objectClass=user))"
strAttributes = "distinguishedName,pager"
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False
adoCommand.Properties("Sort On") = "pager"
Set adoRecordset = adoCommand.Execute
If (adoRecordset.EOF = True) Then
    Wscript.Echo "Aucun numéro de radiomessagerie en double trouvé"
    Wscript.Quit
End If
 
' Effectuer une boucle sur tous les utilisateurs.  
' Afficher les utilisateurs avec un N° qui n’est pas unique.
 
strPreviousPager = ""
strPreviousPath = ""
strResult = ""
 
blnFlag = False
Do Until adoRecordset.EOF
    strDN = adoRecordset.Fields("distinguishedName").Value
    strPager = adoRecordset.Fields("pager").Value
    If (strPager = strPreviousPager) Then
        If (blnFlag = False) Then
			strResult = "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf
        End If
        	strResult = strResult + strDN & vbCrLf
        	MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."          
        blnFlag = True
    Else    
        blnFlag = False
    End If
 
    strPreviousPager = strPager
    strPreviousPath = strDN
    strResult = strResult
    adoRecordset.MoveNext
 
Loop
adoRecordset.Close
 
' Clean up.
adoConnection.Close