Indiquez les groupes à interroger dans la variable ListeDesGroupes
Ici il y en a 2 :
ListeDesGroupes = "NomGroupe1;NomGroupe2"
Option Explicit
Dim MyDistinguishedName
Dim objRootDSE, objItem, objConnection, objCommand, objRecordSet
Dim strContainer, strname
Dim intCounter
Dim dicSeenGroupMember 'Dictionnaire qui va contenir la liste des membres uniques de tous les groupes injectés en entrée
set dicSeenGroupMember = CreateObject("Scripting.Dictionary")
Dim varObjectCategory, varPosition
Dim varCompteur, varMesCles, varMesValeurs
Dim objFSO, objTextFile
Dim NomFichier, CheminFichier, CheminScriptActuel, ScriptFileName, Position
Dim CompteurTotal
Dim ListeDesGroupes, varUnGroup, varArrayGroups, varFiltreRequeteAD
ListeDesGroupes = "NomGroupe1;NomGroupe2"
strContainer = "" 'Si vous souhaitez vous connecter à une OU en particulié, indiquez la ici
Const ADS_UF_ACCOUNTDISABLE = 2
Const ADS_SCOPE_SUBTREE = 2
Const ForReading = 1
Const ForWritting = 2
Const ForAppending = 8
ScriptFileName = wscript.scriptname
Position = InstrRev(ScriptFileName,".")
if (Position > 0) Then ScriptFileName = Left(ScriptFileName, Position - 1)
NomFichier = ScriptFileName & "_out.txt"
CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1)
CheminFichier = CheminScriptActuel & "\" & NomFichier 'Déclaration du chemin et du nom du fichier
If Len(CheminFichier) > 0 Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(CheminFichier, ForWritting, True)
On Error Resume Next
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
Set objItem = GetObject("LDAP://" & objRootDSE.Get("defaultNamingContext"))
Else
Set objItem = GetObject("LDAP://" & strContainer & "," & _
objRootDSE.Get("defaultNamingContext"))
End If
On Error Goto 0
'strname = objItem.Get("name")
'WScript.Echo "name: " & strname
MyDistinguishedName = objItem.Get("distinguishedName") 'Récupération du distinguishedName du domaine par défaut. Exemple DC=Cotonso,DC=Com
'WScript.Echo "distinguishedName: " & MyDistinguishedName
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
'Pour une liste de groupes donnés, on sort les membres
varArrayGroups = Split(ListeDesGroupes, ";")
varFiltreRequeteAD = ""
For Each varUnGroup in varArrayGroups
varFiltreRequeteAD = varFiltreRequeteAD & "(sAMAccountName=" & varUnGroup & ")"
Next
'WScript.echo "Filtre requete ldap pour les groupes : " & varFiltreRequeteAD
'objCommand.CommandText = "<LDAP://" & MyDistinguishedName & ">;(objectCategory=Group);name,cn,displayName,sAMAccountName,distinguishedName,member;subtree"
'objCommand.CommandText = "<LDAP://" & MyDistinguishedName & ">;(&(objectCategory=Group)(|(sAMAccountName=aeff1 nom affiche dans AD)(sAMAccountName=aeff2)));name,cn,displayName,sAMAccountName,distinguishedName,member,objectCategory;subtree"'
objCommand.CommandText = "<LDAP://" & MyDistinguishedName & ">;(&(objectCategory=Group)(|" & varFiltreRequeteAD & "));name,cn,displayName,sAMAccountName,distinguishedName,member,objectCategory;subtree"'
objCommand.Properties("Page Size") = 10000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
'On liste les membres.
'On ajoute dans le dictionnaire que les users qui n'y sont pas déjà
'Si c'est un groupe, on liste les membres et on ajout les membres de type user au dictionnaire si ils n'y sont pas déjà. Si un membre est un groupe, on liste les membres de ce groupe etc ...
Set objRecordSet = objCommand.Execute
intCounter = 0
CompteurTotal = 0
Do Until objRecordset.EOF
'WScript.echo objRecordset.Fields("distinguishedName")
'WScript.echo "Name : " & VbTab & objRecordset.Fields("Name")
'WScript.echo VbTab & "cn : " & VbTab & objRecordset.Fields("cn")
'WScript.echo VbTab & "displayName : " & VbTab & objRecordset.Fields("displayName")
'WScript.echo VbTab & "sAMAccountName : " & VbTab & objRecordset.Fields("sAMAccountName")
'WScript.echo VbTab & "distinguishedName : " & VbTab & objRecordset.Fields("distinguishedName")
'WScript.echo VbTab & "objectCategory : " & VbTab & objRecordset.Fields("objectCategory")
'WScript.echo "Exploration de " & objRecordset.Fields("distinguishedName")
Call ExplorerGroupeEtAjoutMembresDansDico(objRecordset.Fields("distinguishedName"),dicSeenGroupMember)
objRecordset.MoveNext
Loop
objConnection.Close
'On affiche le contenu du dico. En fait les valeurs sont directement les clés
'varMesValeurs = dicSeenGroupMember.keys
'For varCompteur=0 To ubound(varMesValeurs)
'wscript.echo varMesValeurs(varCompteur)
'wscript.echo "dico(" & cles(i) & ")=" & dico.item(cles(i))
'Next
varMesCles=dicSeenGroupMember.keys
For varCompteur=0 To ubound(varMesCles)
'wscript.echo "dicSeenGroupMember(" & varMesCles(varCompteur) & ")=" & dicSeenGroupMember.item(varMesCles(varCompteur))
'wscript.echo dicSeenGroupMember.item(varMesCles(varCompteur))
objTextFile.WriteLine(dicSeenGroupMember.item(varMesCles(varCompteur)))
Next
objTextFile.WriteLine("")
objTextFile.WriteLine("Nombre total de users uniques : " & CompteurTotal)
objTextFile.Close 'Fermeture du fichier
Set objTextFile = Nothing
Set objFSO = Nothing
Else
Wscript.echo "Operation annulee"
End If 'CheminFichier
Function ExplorerGroupeEtAjoutMembresDansDico (ByVal GroupDistinguishedName, ByRef dicSeenGroupMember)
Dim ObjGroupAExplorer, objMember
'Wscript.echo "Exploration du groupe " & GroupDistinguishedName
Set ObjGroupAExplorer = GetObject("LDAP://" & GroupDistinguishedName)
for each objMember In ObjGroupAExplorer.Members
If objMember.Class = "group" Then
'WScript.echo "Exploration du sous groupe " & objMember.distinguishedName
Call ExplorerGroupeEtAjoutMembresDansDico(objMember.distinguishedName,dicSeenGroupMember)
Else
if dicSeenGroupMember.Exists(objMember.ADsPath) then
'Do Nothing
else
'WScript.echo "Ajout d'un user : " & objMember.ADsPath
'dicSeenGroupMember.Add objMember.ADsPath, objMember.sAMAccountName
dicSeenGroupMember.Add objMember.ADsPath, objMember.DisplayName
CompteurTotal = CompteurTotal + 1
end if
End If
next
End Function
Lien vers le fichier : cliquez ici
Article(s) précédent(s)
Article(s) en relation(s)