IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Lister Groupes + Membres ad


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Par défaut Lister Groupes + Membres ad
    C'est encore moi,

    Je sollicite votre aide car je suis à court d'idée, je voulais faire un script qui en fonction d'un groupe m'enregistrai tous ces membres dans un fichier csv, sa ça fonctionne.

    Mais maintenant ce qu'il me faudrait c'est un script qui puisse lister tous les groupes et en dessous les membres de ce type :

    Utilisateur
    membre
    membre

    Utilisateur
    membre
    membre

    etc...
    J'ai commencé un petit script :

    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
    const FileName = "d:\groupmembers.csv"
    Const ADS_SCOPE_SUBTREE = 2
    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 Name, Location FROM 'LDAP://DC=D11130100,DC=cpam-marseille,DC=cnamts,DC=fr'" & "WHERE objectClass='Group'"
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Timeout") = 30
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    objCommand.Properties("Cache Results") = False
    set objFSO = createobject("scripting.filesystemobject")
    set objFile = objFSO.createtextfile(FileName)
    Set ObjRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF
       objFile.WriteLine objRecordSet.Fields("Name").Value
       objFile.WriteLine(q & groupname & q)
       objRecordSet.MoveNext
    Loop
    Mais celui-ci ne liste que les groupes et les enregistre dans un fichier csv.

    J'ai essayé vraiment pas mal de truc, mais le soucis qui se pose c'est comment lister les utilisateurs d'un groupe qui est listé par une boucle et donc qui n'est pas défini au préalable par l'utilisateur.

    Sa me rends fous, merci d'avance

  2. #2
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    Salut.

    Il suffit de récupérer le champ "member" de chaque groupe, et de le lister dans ta boucle s'il est non vide :
    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
    const FileName = "d:\groupmembers.csv"
    Const ADS_SCOPE_SUBTREE = 2
    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 Name, Location, member FROM 'LDAP://DC=SDIS69,DC=fr'" & "WHERE objectClass='Group'"
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Timeout") = 30
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    objCommand.Properties("Cache Results") = False
    set objFSO = createobject("scripting.filesystemobject")
    set objFile = objFSO.createtextfile(FileName)
    Set ObjRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF
    	objFile.WriteLine objRecordSet.Fields("Name").Value
    	arrMembers = objRecordSet.Fields("member")
    	If IsArray(arrMembers) Then	
    		For Each strMember In arrMembers
    			objFile.WriteLine vbTab & strMember
    		Next
    	End If
    	objFile.WriteLine ""
    	objRecordSet.MoveNext
    Loop
    Bonne continuation.

  3. #3
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Par défaut
    Sa fonctionne, mais les utilisateurs sont listés ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CN=Nom du membre,CN=Users,DC=D11130100,DC=cpam-marseille,DC=cnamts,DC=fr
    Moi je veux juste le nom de l'utilisateur et pas de CN ni de DC

    J'ai tout regardé je pense que sa vient de strMember, il faudrait le remplacer par autre chose qui n'afficherait que le nom du membre.

  4. #4
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    Salut.

    Les utilisateurs sont listés par leur distinguishedName car c'est ainsi qu'ils sont stockés dans le champ "member" de l'objet groupe.

    Pour avoir un autre affichage de tes listes d'utilisateurs, plusieurs choix s'offrent à toi :
    - Si tu veux récupérer leur CN, SN, Name ou je ne sais quel autre champ, il faut que tu récupères l'objet utilisateur LDAP à partir de son distinguishedName, dans ce cas tu pourras récupérer tous les champs de l'objet.
    - Si tu veux récupérer le CN, tu peux traiter ta chaine de caractère pour ne récupérer que ce qui t'intéresse dans le distinguishedName (en gros, ce qu'il y a entre le premier CN= et la première virgule).

    Quel que soit ton choix, tu trouveras toutes les informations pour le faire sur la FAQ VBS de ce site, sur ce forum, sur le script center de Microsoft ou sur le Web en général.

    Bonne continuation

  5. #5
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Par défaut
    Bon et bien j'ai choisi une troisième solution, n'arrivant pas à appliquer les tienne.

    Je me suis servis de "Replace", j'en ai même abusé et ça donne ça :

    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
    const FileName = "d:\groupmembers.csv"
    Const ADS_SCOPE_SUBTREE = 2
    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 Name, Location, member FROM 'LDAP://DC=D11130100,DC=cpam-marseille,DC=cnamts,DC=fr'" & "WHERE objectClass='Group'"
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Timeout") = 30
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    objCommand.Properties("Cache Results") = False
    set objFSO = createobject("scripting.filesystemobject")
    set objFile = objFSO.createtextfile(FileName)
    Set ObjRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
     
    Do Until objRecordSet.EOF
    	objFile.WriteLine objRecordSet.Fields("Name")
    	arrMembers = objRecordSet.Fields("member")
    	If IsArray(arrMembers) Then	
    		For Each strMember In arrMembers
    	membersFilter = Replace(strMember, "CN=", "")
    	membersFilter = Replace(membersFilter, ",", "")
    	membersFilter = Replace(membersFilter, "ForeignSecurityPrincipalsDC=D11130100DC=cpam-marseilleDC=cnamtsDC=fr", "")
    	membersFilter = Replace(membersFilter, "=PostesDC=D11130100DC=cpam-marseilleDC=cnamtsDC=fr", "")
    	membersFilter = Replace(membersFilter, "=PortablesDC=D11130100DC=cpam-marseilleDC=cnamtsDC=fr", "")
    	objFile.WriteLine(Replace(membersFilter, "UsersDC=D11130100DC=cpam-marseilleDC=cnamtsDC=fr",""))
    		Next
    	End If
    	objFile.WriteLine ""
    	objRecordSet.MoveNext
    Loop
    objFile.Close
    C'est bien laid hein ? Mais sa fonctionne et plutôt très bien

    Merci pour tout

Discussions similaires

  1. Réponses: 12
    Dernier message: 16/03/2011, 14h07
  2. Lister les membres des groupes AD
    Par Firenight dans le forum VBScript
    Réponses: 1
    Dernier message: 10/06/2010, 11h11
  3. Vbs AD Lister les membres de groupe imbriqué
    Par vikingraver dans le forum VBScript
    Réponses: 2
    Dernier message: 16/11/2009, 15h54
  4. Lister les membres d'un groupe active directory
    Par Ludo75 dans le forum VBScript
    Réponses: 1
    Dernier message: 18/06/2008, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo