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
| ' 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
REM If (adoRecordset.EOF = True) Then
REM Wscript.Echo "Aucun numéro de radiomessagerie en double trouvé"
REM Wscript.Quit
REM End If
' ##### Moi je mettrais :
adoRecordset.MoveFirst
'##### car le branchement sur la base de données peut se faire n'importe où et notamment si c'est à la fin
'##### on arrête Wscript(donc tout le traitement qui suit ne sera jamais exécuté)
' 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
REM MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."
blnFlag = True
Else
blnFlag = False
End If
strPreviousPager = strPager
strPreviousPath = strDN
'strResult = strResult ' car inutile
adoRecordset.MoveNext
Loop
' ICI l'endroit où on peut voir le résultat tout entier de la recherche :
MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."
' Clean up.
adoRecordset.Close
adoConnection.Close |
Partager