recherche OU d'un utilisateur donné d'Active directory [RESOLU] [VBS] - VB/VBA/VBS - Programmation
Marsh Posté le 16-02-2006 à 11:28:00
Salut !
le script suivant permet de retrouver le DistinguishedName de l'utilisateur (donc le chemin ldap complet contenant l'OU), il faut juste renseigner le nom de l'utilisateur comme argument.
' ---------
' script pour retrouver des paramètres spécifiques
' à l'utilisateur en partant de son login
' pas de droits spécifiques nécessaires au niveau AD
' --------
' récupération du login de l'utilisateur en arguemnt
set oArgs = wscript.arguments
usrLOG = oArgs(0)
' Recherche du login dans AD
' cette première section se connecte au contexte du domaine
Set objDSE = GetObject("LDAP://rootDSE" )
set oConnection = CreateObject("ADODB.Connection" )
oConnection.Provider = "ADsDSOObject"
oConnection.Open "ADs Provider"
' ci dessous le filtre sur le login utilisateur
sFilter = "(&(objectclass=user)(samaccountname=" & usrLOG & " ))"
' dans cette ligne, on défini les paramètres récupéré : ici
DistinguishedName
' c'est celle ci que vous pouvez modifier en fonction des paramètres ADSI à récupérer (paramètre avant subtree, séparé par des virgules)
sQuery = "<LDAP://" & objDSE.Get("defaultNamingContext" ) & ">;" & sFilter & ";distinguishedName;subtree"
Set oRecordSet = oConnection.Execute(sQuery)
' on inscrit le distinguishedName dans une variable, et voilà
usrDN = oRecordset.Fileds("distinguishedName" ).value
oConnection.Close
' affichage du distinguishedName pour la forme :
wscript.echo usrDN
j'espère que ça peut t'aider.
Marsh Posté le 16-02-2006 à 12:52:30
pilosite jte remercie je vais tester ça et c'est tout à fait ce que je cherchais!
ça marche super bien, c'est beaucoup plus rapide que ce que j'avais fait, c'est pile poil ce qui me fallais!
C'est toi qui a écris ce script?
Marsh Posté le 17-02-2006 à 10:08:09
tant mieux! c'est effectivement la méthode la plus rapide que je connaisse pour l'interrogation AD, mais y a plus légé niveau code... par contre cette méthode te permet de rappatrier n'importe quel argument d'un objet, pas seulement le DistinguishedName,
suffit de rajouter le nom ADSi de l'argument dans la query séparés par des virgules :
sQuery = "<LDAP://" & objDSE.Get("defaultNamingContext" ) & ">;" & sFilter & ";distinguishedName,cn,Mail;subtree"
et en dessous d'inscrire l'argument dans une variable du style :
usrMail = oRecordset.Fileds("Mail" ).value
@+
Marsh Posté le 17-02-2006 à 10:15:40
c'est cool!
justement je voulais te demander comment ça marche vraiment le filtre, la syntaxe en gros?
Marsh Posté le 17-02-2006 à 10:27:22
et bah voilà, tu as la syntaxe
après, le truc c'est connaitre les noms exacts des différents arguments des objets AD. A ce titre je vous conseil ce site internet:
http://www.dx21.com/SCRIPTING/ADSI/INDEX.ASP
il fourni l'ensemble des paramètres ADSI des objets utilisateurs et ordinateurs, avec des exemples de scripts très complet, un must pour le scripting ADSI
Marsh Posté le 15-02-2006 à 08:30:39
Bonjour,
Il me faudrait un script qui me permettre de connaître l'OU d'un utilisateur donné, si quelqu'un peut m'aider se serait sympa!
j'ai essayé ce code :
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 ou from 'LDAP://DC=pdch,DC=fr'Where objectClass='user' and samAccountName='"& MonCompte & "'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
if objRecordSet.EOF=false then
wscript.echo objRecordSet.Fields("OU" ).Value
end if
Je n'ai pas d'erreur mais il m'affiche null, pourquoi??
je viens de trouver un morceau de code qui affiche l'OU de l'utilisateur courant ou de l'ordinateur mais comment l'adapter à mon cas ?
Set objADSysInfo = CreateObject("ADSystemInfo" )
WScript.Echo "Current site name: " & objADSysInfo.SiteName
Pour l'instant j'ai trouvé une solution qui fonctionne mais qui ne me conviens pas forcément. Je parcours les OU une par une, puis je compare les utilisateurs un à un afin de voir si le nom d'utilisateur entré correspond a l'utilisateur.
Message édité par Sboubinette62 le 16-02-2006 à 15:13:02