web-dev-qa-db-fra.com

Obtenir les détails de l'AD en fonction du nom d'utilisateur

J'ai un code pour récupérer les détails d'un utilisateur de l'ANNONCE tels que l'adresse e-mail, le numéro de téléphone, etc., etc. Les codes que j'utilise actuellement sont les suivants:

Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
msgbox(strUser)
Set objUser = GetObject("LDAP://" & strUser)

Il obtient les détails de l'utilisateur actuellement connecté. Mais ce que je dois faire maintenant, c'est analyser le nom d'utilisateur de l'utilisateur et récupérer les détails en fonction.

J'ai essayé de changer objSysinfo.UserName pour le nom d'utilisateur et il est retourné vide.

Set objSysInfo = CreateObject("ADSystemInfo")
strUser = "SomeUserName"
msgbox(strUser)
Set objUser = GetObject("LDAP://" & strUser)

Comment puis-je récupérer les détails de l'ANNONCE sur la base d'un nom d'utilisateur fourni?

7
Bloopie Bloops

Les URI LDAP nécessitent un nom distinctif. Les noms de compte ne fonctionneront pas. Si vous souhaitez obtenir des objets utilisateur basés sur le nom du compte, vous avez besoin d'une requête LDAP "normale":

username = "SomeUserName"

Set rootDSE = GetObject("LDAP://RootDSE")
base  = "<LDAP://" & rootDSE.Get("defaultNamingContext") & ">"
'filter on user objects with the given account name
fltr  = "(&(objectClass=user)(objectCategory=Person)" & _
        "(sAMAccountName=" & username & "))"
'add other attributes according to your requirements
attr  = "distinguishedName,sAMAccountName"
scope = "subtree"

Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADsDSOObject"
conn.Open "Active Directory Provider"

Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = base & ";" & fltr & ";" & attr & ";" & scope

Set rs = cmd.Execute
Do Until rs.EOF
  WScript.Echo rs.Fields("distinguishedName").Value
  rs.MoveNext
Loop
rs.Close

conn.Close

Depuis que je me suis énervé d'avoir à écrire tout ce code standard, je l'ai enveloppé dans une classe ( ADQuery ) il y a quelque temps.

14
Ansgar Wiechers

Un commentaire supplémentaire à Ansgar the RootDSE est idéal si vous n’avez qu’un seul domaine. Vous pouvez modifier son code pour qu'il pointe ailleurs:

    base  = "<LDAP://" & rootDSE.Get("defaultNamingContext") & ">"

à quelque chose comme:

    base  = "<LDAP://" & "DC=corp,DC=foo,DC=com" & ">"

si votre domaine AD domaine est corp.foo.com

0
Michael Berg