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 :

obtenir une liste des utilisateur ds AD


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut obtenir une liste des utilisateur ds AD
    bonjour,

    je cherche un moyen de récupérer la liste des utilisateurs de l'AD avec le nb de groupes auquel chacun appartient
    pour l'instant j'arrive a obtenir le nb de groupe, mais localement et pour UN utilisateur. cad que je lance mon script et j'obtient le nb de groupes auquel J'APPARTIENS

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je n'utilise pas AD et je ne pourrais pas t'aider, mais il y a quelque personne ici sur le forum qui pourront t'aider.
    Mais cela serait peut être plus pratique, pour qu'ils puissent t'aider au mieux, que tu montres ce que tu as fait jusqu'ici, bref que tu postes ton script.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Pour l'instant j'ai fait ceci:
    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
     
    Set objADSysInfo = CreateObject("ADSystemInfo")
    Set objNetwork = CreateObject("Wscript.Network")
    strADUserName = objADSysInfo.UserName
     
    Set objUser = GetObject("LDAP://" & strADUserName) 
    strUser = objNetwork.username
    objmemberOf  = objUser.GetEx("memberOf" )
    i = 0
    WScript.Echo " [ Debug ] Nom user: " & strUser
     
    For Each objGroup in objmemberOf  
        i = i + 1
    Next
    WScript.Echo " [ Debug ] Nombres de groupes: " & i
    mais comme je l'ai dit, ca affiche MON nom et le nb correspondant au nb de groupe auquel j'appartiens. ms moi je veux la liste de l'ensemble des utilisateurs du domaine

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    ce comportement est certainement dû au fait que tu spécifie ton user à toi dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objUser = GetObject("LDAP://" & strADUserName)
    N'y aurais t'il pas l'équivalent d'un "ALL" plutôt que de mettre le user ?

    Fait une recherche sur le forum, je crois me souvenir de post où il était question d'obtention de liste des utilisateurs.

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    oui je sais, c'etait pour tester dejà.
    j'ai cherché sur le forum, j'ai trouvé des thread ms concernant des utilisateur en local, et pas sur un controleur de domaine

    je vais continuer mes recherches

  6. #6
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Points : 212
    Points
    212
    Par défaut
    déjà il y a un truc a savoir sur les memberof :

    la liste affiche les groupes "principaux" (builtin pour la plupart) et les autres groupes. Entre ces 2 affichages, il s'y glisse un groupe "vide" qui doit servir de séparateur.

    donc je remplacerais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each objGroup in objmemberOf  
        i = i + 1
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each objGroup in objmemberOf  
    if objGroup = "" Then
        i = i + 1
    End If
    ensuite lancer la moulinette sur tous les utilisateurs, il faut faire une requete que je te copierai plus tard car pas le temps de chercher tout de suite

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par spantemonium Voir le message
    donc je remplacerais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each objGroup in objmemberOf  
        i = i + 1
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each objGroup in objmemberOf  
    if objGroup = "" Then
        i = i + 1
    End If
    en prenant ta proposition, je n'obtiens pas la bonne valeur

    comment ca lancer la moulinette sur chq utilisateur? tu veux dire qu'on va faire ca pr les 350 utilisateurs qui m'entourent?? lool
    Merci de ton aide en tt cas

  8. #8
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    J'avais récupéré une appli VB6 qui permet de liste l'AD.

    Je la joins en ZIP.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par pc75 Voir le message
    Bonjour,

    J'avais récupéré une appli VB6 qui permet de liste l'AD.

    Je la joins en ZIP.
    Msg d'erreur à l'execution: "Le composant 'MSWINSCK.OCX' ou une des ses dépendances n'est pas correctement enregistré: un fichier est absent ou incorrect

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    J'ai trouvé ceci:
    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
     
    Dim Ldap 
    Dim searcher
    Ldap = new DirectoryEntry("LDAP://******", "Login", "Password")
    searcher = New DirectorySearcher (Ldap)
     
    searcher.Filter = "(objectClass=user)"
     
    Dim DirEntry As DirectoryEntry 
    For Each result In searcher.FindAll 
    'On récupère l'entrée trouvée lors de la recherche 
     
    DirEntry = result.GetDirectoryEntry 
    'On peut maintenant afficher les informations désirées 
     
    Console.WriteLine("Login : " + DirEntry.Properties("SAMAccountName").Value) 
    Console.WriteLine("Nom : " + DirEntry.Properties("sn").Value) 
    Console.WriteLine("Prénom : " + DirEntry.Properties("givenName").Value) 
    Console.WriteLine("Email : " + DirEntry.Properties("mail").Value) 
    Console.WriteLine("Tél : " + DirEntry.Properties("TelephoneNumber").Value) 
    Console.WriteLine("Description : " + DirEntry.Properties("description").Value) 
    Console.WriteLine("-------------------") 
     
    Next
    jai un msg d'erreur a la ligne 3, me disant qu'une fin d'instruction est attendue

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Normal, c'est du VB et pas du VBS.

    Dim DirEntry As DirectoryEntry devient Dim DirEntry.

    Essaye de remplacer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Ldap = GetObject("LDAP://******", "Login", "Password")
    searcher = New DirectorySearcher (Ldap)
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Ldap = new DirectoryEntry("LDAP://******")
    searcher = Ldap.DirectorySearcher (Ldap)
    Je ne suis pas sur que cela fonctionne, mais en vbs tu dois passer par un GetObject puis ensuite récupérer un à un les objets qui sont inclus dnas l'objet initial renvoyé par GetObject, pour arriver à obtenir l'objet désiré.
    Des méthodes d'objets peuvent aussi te permettre de récupérer d'autre objets (les méthodes retournent alors l'objet recherché).

  12. #12
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    bizarre, c'est pourtant un script que j'ai trouvé dans une doc. en tout cas rien ne fonctionne

  13. #13
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Non mais il marche c certain, mais c du VBA ou du VB6 pas du VBS, il y a des différences, donc il faut réussir à le réadapter.

  14. #14
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    bon cherchant une solution qui fonctionne, je suis reparti sur une autre piste:

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    ' Enumerate AD LDS groups and group members.
     
    Option Explicit
     
    Dim objADAM    ' Binding object.
    Dim objGroup   ' Group object.
    Dim objMember  ' Member object.
    Dim strPath    ' Binding path.
    Dim strOU      ' OU à renseigner
    Dim i 
    i = 0
     
    ' Construct the binding string.
    strOU = inputbox("Entrez l'OU: ", "Renseignement")
    strPath = "LDAP://OU=" & strOU & ",OU=***,DC=***,DC=***,DC=***"
     
    WScript.Echo "Bind to: " & strPath
    WScript.Echo "Enum:    Groups and members"
     
    On Error Resume Next
     
    ' Bind to object.
    Set objADAM = GetObject(strPath)
     
     
    ' Output error if bind fails.
    If Err.Number <> vbEmpty Then
        WScript.Echo "Error:   Bind failed."
        WScript.Quit
    End If
     
    ' Enumerate groups and members.
    objADAM.Filter = Array("group")
    For Each objGroup in objADAM
     	WScript.Echo "Group:   " & objGroup.Name
        For Each objMember in objGroup.Members
            WScript.Echo "Member:  " & objMember.Name
    		objMemberOf  = objMember.GetEx("memberOf" ) 
    		For Each objGroup2 in objMemberOf  
    			i = i + 1
    		Next
        Next
    Next
     
    WScript.Echo " i " & i
    ' Output success or error.
    If Err.Number <> vbEmpty Then
        WScript.Echo "Error:   Enumeration failed."
    Else
        WScript.Echo "Success: Enumeration complete."
    End If
    bon ca marche nickel...mais ca résout l'inverse de mon preoblème loool. il compte le nombre d'utilisateurs dans chq groupe de l'OU spécifiée. alors que moi je veux l'inverse, je veux le nombre de groupes auquel appartient l'utilisateur. et j'arrive pas a adapter le script

  15. #15
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Citation Envoyé par cikky Voir le message
    Msg d'erreur à l'execution: "Le composant 'MSWINSCK.OCX' ou une des ses dépendances n'est pas correctement enregistré: un fichier est absent ou incorrect
    Il faudra peut être un regsvr32
    Fichiers attachés Fichiers attachés

  16. #16
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Plutot que compter le nombre d'utilisateur, utilise les dictionnaires pour enregistré chaque user en key, et en valeur un tableau de groupe.
    SI un user est dans le dico tu ajoutes un groupe au tableau, sinon tu crée une nouvelle entrée.

  17. #17
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    bon après quelques jours d'acharnement j'ai enfin réussi à obtenir ce que je cherchais. je poste ma solution ca pourrait aider certains

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Set adsRootDSE = GetObject("LDAP://RootDSE")
    strDomainPath = adsRootDSE.Get("DefaultNamingContext")
    Set adsUsers = GetObject("LDAP://" & strDomainPath)
    Set objFSO = CreateObject ("Scripting.FileSystemObject")
    Set objFile = objFSO.CreateTextFile("c:\number_of_groups_per_user.csv")
    Dim i 
    i = 0
     
    adsUsers.Filter = Array("organizationalUnit")
     
    Call EnumOUs(adsUsers)
     
    Sub EnumOUs(objParent)
     
    	On Error Resume Next
     
    	Dim objUser, cn
     
    	' Recursive subroutine to enumerate all OU's.
    	objParent.Filter = Array("User")
     
    	For Each objUser in objParent
    		If objUser.Class = "user" Then
    			' Expand on this if you would to grab other attributes.
    			cn = objUser.cn
     
    			' Ecriture dans le fichier .csv
    			'Wscript.echo " [ Debug ] Common Name: " & cn
    			For Each objGroup in objUser.GetEx("memberOf")  
    				i = i + 1
    			Next
    			objFile.WriteLine cn & ";" & i
    			i = 0
    		End If
    	Next
     
    	objParent.Filter = Array("organizationalUnit")
     
    	For Each objChild In objParent
    		Call EnumOUs(objChild)
    	Next
     
    End Sub
     
    Wscript.Echo "Creation du fichier reussie: c:\number_of_groups_per_user.csv"
    bon c'est pas optimisé, surtout le message de fin, mais ca suffit pour mon problème initial

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Obtenir une liste des tables en ordre hierarchique
    Par SergioMaster dans le forum SQL
    Réponses: 13
    Dernier message: 07/09/2008, 09h19
  2. obtenir une liste des noms de session d'un ordinateur
    Par Raylemon dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 09/03/2006, 19h12

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