Appartenance à un groupe AD vbs

Appartenance à un groupe AD vbs - VB/VBA/VBS - Programmation

Marsh Posté le 10-07-2006 à 17:22:34    

Hello,
 
J'utilise actuellement le script vbs suivant pour tester l'appartenance aux groupes AD.
La limite de ce script est de ne sortir que le premier niveau d'appartenance.
J'aimerai aller juste un niveau au dessus.
Ainsi pour un utilisateur donné s'il appartient au groupe A lui même memebre du groupe B, j'aimerai que le script me renvoi ces 2 groupes...
 
Avez-vous une idée?
-------------------------------------------------------------
On error resume next
 
Set WshNetwork = WScript.CreateObject("WScript.Network" )
Set ObjNetwork = WScript.CreateObject("WScript.Network" )
set WshShell = CreateObject("WScript.Shell" )
 
DomainName=WshShell.ExpandEnvironmentStrings("%USERDOMAIN%" )
 
Set UserObj = GetObject("WinNT://" & DomainName & "/" & WshNetwork.username)
 
 
'Init Groups
Dim UserGroups
Dim GroupObj
UserGroups=""
For Each GroupObj In UserObj.Groups
UserGroups=UserGroups & "[" & GroupObj.Name & "]"
Next
 
'wscript.echo "Membre de "&UserGroups
 
 
 
'
Function InGroup(strGroup)
  InGroup=False
  If InStr(UserGroups,"[" & strGroup & "]" ) Then
    InGroup=True
  End If
End Function
 
-------------------------------------------------------------
 
Merci d'avance
 
 :hello:

Reply

Marsh Posté le 10-07-2006 à 17:22:34   

Reply

Marsh Posté le 13-07-2006 à 10:34:52    

Personne n'aurai une petite idée?

Reply

Marsh Posté le 18-07-2006 à 10:40:03    

:bounce:

Reply

Marsh Posté le 18-07-2006 à 14:44:29    

ADSI?


---------------
ビブリボン | Memoro de la Stono | まかんこうさっぽう

Reply

Marsh Posté le 19-07-2006 à 19:18:11    


 
Qu'est-ce donc?

Reply

Marsh Posté le 24-07-2006 à 14:25:49    

J'arrive pas vraiment a m'en sortir.
J'ai bien trouvé des scripts permettant de lister tous les groupes mais il faut utiliser la syntaxe LDAP:// plutot que WinNT:// donc moins intéressant
 
Quelqu'un aurait-il une piste?

Reply

Marsh Posté le 24-07-2006 à 17:45:38    

Ah non c'est plus interessant justement, tiens voila ce que j'ai:
Tu rentres ton nom d'utilisateur que tu cherches ainsi que le chemin LDAP de ton domaine (L'OU par défaut est déjà indiquée)
 
Voila amuse toi bien ;)
 


On Error Resume Next
Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D
StrUser=InputBox("User?","ListMembersGroups" )
LDAPPAth=InputBox("Chemin LDAP?","ListMembersGroups","cn=Users,dc=xxxxxx,dc=xxxxxx" )
If LDAPPAth = "cn=Users,dc=xxxxxx,dc=xxxxxx" Then WScript.quit
Set objUser = GetObject("LDAP://cn=" & StrUser & "," & LDAPPAth)  
intPrimaryGroupID = objUser.Get("primaryGroupID" )
arrMemberOf = objUser.GetEx("memberOf" )
If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then
    WScript.Echo "The memberOf attribute is not set."
Else
    For Each Group in arrMemberOf
        WScript.Echo "Member of: "
        WScript.Echo Group  
        Set objGroup = GetObject("LDAP://" & Group)
  objGroup.GetInfo
  GroupsarrMembersOf = objGroup.GetEx("memberOf" )
  For Each strMemberOf in GroupsarrMembersOf
      If strMemberOf <> "" Then
       ArrGroup=Split(Group,"," )
       ArrGroupMember=Split(strMemberOf,"," )
    WScript.Echo  """" & Mid(ArrGroup(0),4) & """ Group is Member Of: """ & Mid(ArrGroupMember(0),4) & """"
   End If
  Next
        WScript.Echo vbLf
    Next
End If


 


---------------
ビブリボン | Memoro de la Stono | まかんこうさっぽう

Reply

Marsh Posté le 24-07-2006 à 17:55:21    

Y en a qui s'emm... vraiment pendant les vacances !
pardon... qui s'amusent comme des p'tits fous !

Reply

Marsh Posté le 25-07-2006 à 08:49:31    

sennastien a écrit :

Ah non c'est plus interessant justement, tiens voila ce que j'ai:
Tu rentres ton nom d'utilisateur que tu cherches ainsi que le chemin LDAP de ton domaine (L'OU par défaut est déjà indiquée)
 
Voila amuse toi bien ;)
 


On Error Resume Next
Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D
StrUser=InputBox("User?","ListMembersGroups" )
LDAPPAth=InputBox("Chemin LDAP?","ListMembersGroups","cn=Users,dc=xxxxxx,dc=xxxxxx" )
If LDAPPAth = "cn=Users,dc=xxxxxx,dc=xxxxxx" Then WScript.quit
Set objUser = GetObject("LDAP://cn=" & StrUser & "," & LDAPPAth)  
intPrimaryGroupID = objUser.Get("primaryGroupID" )
arrMemberOf = objUser.GetEx("memberOf" )
If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then
    WScript.Echo "The memberOf attribute is not set."
Else
    For Each Group in arrMemberOf
        WScript.Echo "Member of: "
        WScript.Echo Group  
        Set objGroup = GetObject("LDAP://" & Group)
  objGroup.GetInfo
  GroupsarrMembersOf = objGroup.GetEx("memberOf" )
  For Each strMemberOf in GroupsarrMembersOf
      If strMemberOf <> "" Then
       ArrGroup=Split(Group,"," )
       ArrGroupMember=Split(strMemberOf,"," )
    WScript.Echo  """" & Mid(ArrGroup(0),4) & """ Group is Member Of: """ & Mid(ArrGroupMember(0),4) & """"
   End If
  Next
        WScript.Echo vbLf
    Next
End If



 
 
Le truc c'est que tous mes utilisateurs ne sont pas dans le conteneur "Builtin Users" et que le chemin LDAP n'est donc jamais le même.
L'idée c'est d'avoir un mappage des ressources en fonction du groupe d'appartenance et ce pour chaque utilisateur au login...
 
C'est pour cela que j'arrive pas a m'en sortir avec la syntaxe LDAP://, et aussi, et même surout parceque je suis un novice en wsh...

Reply

Marsh Posté le 25-07-2006 à 10:21:20    

A ce moment là fait d'abord une recherche de ton chemin LDAP sur ta liste de user puis pour chaque chemin trouvé, tu inseres directement le chemin LDAP dans ta requête des membres de groupe.
 
De toutes façons tu ne dois pas avoir 200 chemins différents, tes Users sont contenus majoritairement dans une OU nan?


---------------
ビブリボン | Memoro de la Stono | まかんこうさっぽう

Reply

Marsh Posté le 25-07-2006 à 10:21:20   

Reply

Marsh Posté le 25-07-2006 à 18:28:28    

sennastien a écrit :

A ce moment là fait d'abord une recherche de ton chemin LDAP sur ta liste de user puis pour chaque chemin trouvé, tu inseres directement le chemin LDAP dans ta requête des membres de groupe.


 
Tu veux dire qu'on peux obtenir le chemin LDAP de l'utilisateur connécté?
A quoi ressemblerai ce bout de script?
 

sennastien a écrit :

De toutes façons tu ne dois pas avoir 200 chemins différents, tes Users sont contenus majoritairement dans une OU nan?


 
Non, c'est clair. Je dois avoir 7 ou 8 OU "Users"
 
Merci pour tes réponses en tout cas...on vas y arriver

Reply

Marsh Posté le 26-07-2006 à 10:54:28    

JUJU a écrit :

Tu veux dire qu'on peux obtenir le chemin LDAP de l'utilisateur connécté?
A quoi ressemblerai ce bout de script?

  

Non, c'est clair. Je dois avoir 7 ou 8 OU "Users"

 

Merci pour tes réponses en tout cas...on vas y arriver

 


  


Of course  :)
http://www.microsoft.com/france/te [...] y1021.mspx  
 
et pour répondre plus directemetn  à ta question, voila le code:
 
On Error Resume Next
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.Properties("Page Size" ) = 1000
objCommand.Properties("Searchscope" ) = ADS_SCOPE_SUBTREE  
objCommand.CommandText = "SELECT distinguishedName FROM 'LDAP://dc=TOTO,dc=fr' WHERE objectCategory='user' "
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    Wscript.Echo objRecordSet.Fields("distinguishedName" ).Value
    objRecordSet.MoveNext
Loop
 
Et voila ;)

Message cité 1 fois
Message édité par sennastien le 26-07-2006 à 11:05:05

---------------
ビブリボン | Memoro de la Stono | まかんこうさっぽう

Reply

Marsh Posté le 27-07-2006 à 08:41:04    

sennastien a écrit :

Of course  :)  
http://www.microsoft.com/france/te [...] y1021.mspx  
 
et pour répondre plus directemetn  à ta question, voila le code:
 
On Error Resume Next
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.Properties("Page Size" ) = 1000
objCommand.Properties("Searchscope" ) = ADS_SCOPE_SUBTREE  
objCommand.CommandText = "SELECT distinguishedName FROM 'LDAP://dc=TOTO,dc=fr' WHERE objectCategory='user' "
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    Wscript.Echo objRecordSet.Fields("distinguishedName" ).Value
    objRecordSet.MoveNext
Loop
 
Et voila ;)


 
 
 
Ca c'est de la réactivité.
Le lien vers le site MS peut m'être également fort utile.
Je vais regarder comment utiliser tout ca dans mon script existant mais je dois dire que je commence à y voir un peu plus clair.
 
Je te tiens au courant.
 
Merci encore
 
:jap:

Reply

Marsh Posté le 28-06-2007 à 08:52:44    

Bonjour,
 
Finalement as-tu trouvé le code pour pouvoir lister tous les utilisateurs contenu dans un groupe et sous groupe ?
Je suis à la recherche active de ce type de code mais pour l'instant, comme bon nombre, je n'arrive à ressortir que les users contenu dans le groupe.
 
Je ne suis pas vraiment un spécialiste de VBS...
 
Merci
Teddy


Message édité par tdanet le 28-06-2007 à 09:04:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed