根据用户名获取AD详细信息

Blo*_*ops 9 vbscript vba active-directory

我有一个代码从AD检索用户的详细信息,如电子邮件地址,电话号码等.我目前使用的代码是:

Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
msgbox(strUser)
Set objUser = GetObject("LDAP://" & strUser)
Run Code Online (Sandbox Code Playgroud)

它获取当前登录用户的详细信息.但我现在需要做的是解析用户的用户名并根据该用户名检索详细信息.

我试图将objSysinfo.UserName更改为用户名并返回空白.

Set objSysInfo = CreateObject("ADSystemInfo")
strUser = "SomeUserName"
msgbox(strUser)
Set objUser = GetObject("LDAP://" & strUser)
Run Code Online (Sandbox Code Playgroud)

我应该如何根据提供的用户名从AD中检索详细信息?

Ans*_*ers 17

LDAP URI需要可分辨名称.帐户名称不起作用.如果要根据帐户名称获取用户对象,则需要"常规"LDAP查询:

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
Run Code Online (Sandbox Code Playgroud)

由于我不得不一遍又一遍地编写所有样板代码而烦恼,所以我ADQuery不久前将它包装在一个类()中.

  • @RickHenderson我会考虑的。 (2认同)