[vbs][Active Directory] Détection de doublons. Problème d'affichage MsgBox si plus de deux.
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:
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 denregistrements est trié par numéros de radiomessagerie et les valeurs en double sont de sortie.
'Ce VBScript est conçu pour sexé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 lobjet RootDSE.
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
' Utilisation dADO 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 nest 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 |