Script pour Supprimer les groupes Vides

Résolu
vince_fr Messages postés 5 Date d'inscription vendredi 11 août 2006 Statut Membre Dernière intervention 11 août 2006 - 11 août 2006 à 11:10
vince_fr Messages postés 5 Date d'inscription vendredi 11 août 2006 Statut Membre Dernière intervention 11 août 2006 - 11 août 2006 à 11:48
Bonjour,

Voici un script qui recherche dans une O.U. donnée les groupes n'ayant aucun membre.

Pour ne pas faire de betise, le script modifie la description du groupe (au lieu de l'effacer).

Ensuite, il suffit de faire un tri par description et d'effacer les groupes.

Vince.

Option Explicit

Dim strGroupDN, objGroup, objFSO, objTextFile, total_member, strmember, shortname, arrMemberOf, group_descript
Dim objConnection, objCommand, objRecordSet, ou_a_traiter

' +-------------------------------------------------------+
' I  Profondeur de recherche dans les sous O.U.           I
' +-------------------------------------------------------+
Const ADS_SCOPE_SUBTREE = 2
Const ForAppending = 8

' +-------------------------------------------------------+
' I  Confirmation d'effacement                            I
' +-------------------------------------------------------+
Const Pour_de_vrai = 0

' +-------------------------------------------------------+
' I   O.U. de debut de traitement                         I
' +-------------------------------------------------------+
ou_a_traiter = "OU=Groupes Acces Ressources, OU=administration, OU=Commun, OU=siege, DC=id, DC=fr, DC=cly"

' +-------------------------------------------------------+

' Creation du fichier
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Non du fichier pour la liste des groupes vides
Set objTextFile = objFSO.OpenTextFile _
("Groupes_vides_" & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & ".csv", ForAppending, True)

' Declaration de la requete dans l'A.D.
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select DistinguishedName,Name from 'LDAP://" & ou_a_traiter & "'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

' Execution de la requete dans l'A.D.
Set objRecordSet = objCommand.Execute

' Pointe sur le premier enregistrement resultat de la requete
objRecordSet.MoveFirst

' Passe au deuxieme enregistrement

objRecordSet.MoveNext
' Premiere ligne du fichier resultat

objTextFile.WriteLine("Groupe,NB membre")

' Debut de la boucle
Do Until objRecordSet.EOF
   On error resume Next
  
' Nom complet du groupe  
   strGroupDN = objRecordSet.fields("DistinguishedName").value
  
' Nom court du groupe
   shortname= objRecordSet.fields("Name").value
   Set objGroup = GetObject("LDAP://" & strGroupDN)
   Total_member=0
  
   arrMemberOf = objGroup.GetEx("member")
  
' Si pas d'erreur c'est que le groupe n'est pas vide
   If err.number = 0 Then
        For Each strMember in arrMemberOf
          total_member = total_member+1
      Next
   Else
  
' Sinon ajout d'un commentaire sur la description  
      group_descript = "# Groupe Vide le " & Date & " - " & objgroup.get("description")
      objGroup.Put "Description", group_descript
        objGroup.SetInfo

' Efface le groupe       
        If Pour_de_vrai = 1 Then
             objgroup.DeleteObject(0)
      End If   
   End If
  
      objTextFile.WriteLine(shortname & "," & total_member)      
   objRecordSet.MoveNext
Loop

objTextFile.Close

3 réponses

vince_fr Messages postés 5 Date d'inscription vendredi 11 août 2006 Statut Membre Dernière intervention 11 août 2006
11 août 2006 à 11:12
Remarques :

-1- Pensez à mettre la contante "pour de vrai" à 1, pour que le scrit agisse réellement.

-2- LE script genere un fichier .csv, tracant ce qu'il fait.

Vicne
3
Hitch16 Messages postés 78 Date d'inscription vendredi 4 février 2005 Statut Membre Dernière intervention 6 octobre 2008
11 août 2006 à 11:36
Salut,

Pas mal du tout mais je pense que ça aurait été mieux de le poster en source et non sur le forum...

Ton fichier CSV ne trace pas vraiment, tu ne l'appels que 2 fois...

ça aurait été pas mal de tout tracer comme un vrai log
0
vince_fr Messages postés 5 Date d'inscription vendredi 11 août 2006 Statut Membre Dernière intervention 11 août 2006
11 août 2006 à 11:48
Desolé, si un modo veux deplacer mon, post, no problemo.

Le csv, trace tout les objets parcourut et indique ce qu'il y fait.

Vince
0
Rejoignez-nous