LDAP查询通过URL

t0m*_*man 6 url excel vba ldap

我试图通过Visual Basic进行LDAP查询.我没有Active Directory的管理员权限,但我能够查看所有用户对象.我不知道在我通过LDAP://查询搜索目录时有什么限制.

在我正在构建的Excel应用程序中,我有一个用于输入用户ID的列.一旦用户输入用户ID,我希望根据与该用户相关联的服务器端信息自动填充其他列(例如,电子邮件地址)

假设c.Value是已输入电子表格的用户ID值:

strUser = "CN=" & c.Value & ",OU=User Accounts,OU=Area,OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk/"
Set objUser = GetObject("LDAP://" & strUser)
Run Code Online (Sandbox Code Playgroud)

问题是这个 - 其中OU =区域已知,搜索成功.但是,我希望查询检查UserID的所有区域OU.据我所知,他们没有被保留或镜像在一个中心位置.是否可以在这样的查询中使用通配符?

有没有人有任何其他想法或建议,以替代方式去做这个?

谢谢,

汤姆

Har*_*wok 5

在回答您的问题之前,以下是Active Directory的一些基本知识背景知识.

  • Active Directory上的用户对象包含许多属性.
  • CN是用户对象的属性之一.它并不总是与您的登录用户名相同.
  • samAccountName是Windows 2000之前的登录名字符串.这可能就是你要找的东西.
  • 对象以层次结构方式存储.用户对象可以放在OU或容器下

要执行LDAP查询,您需要使用ADO连接对象.您需要将LDAP查询字符串传递给ADO连接对象.LDAP查询字符串包含四个部分.

  • 根路径,我们开始搜索的地方.
  • LDAP过滤器
  • 返回属性
  • 搜索范围

您应该使用的LDAP查询字符串应该是类似的

<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=yourusername));adspath;subtree
Run Code Online (Sandbox Code Playgroud)
  • 上例中的根路径是<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>.这意味着在这个级别开始搜索
  • 由于您正在搜索用户,因此LDAP过滤器是(&(objectClass=user)(samAccountName=yourusername)).当然,您需要替换yourusername代码中的其他内容.如果您真的想在CN上进行搜索,请在此处将其更改为CN
  • 返回的属性是一个特殊属性adspath,允许您稍后绑定到该对象
  • 我假设您正在尝试搜索同一域下的所有用户对象.所以,你的搜索范围应该是subtree

这是一个完整的样本,我想它应该完成你的工作

userName = "harvey"
ldapStr = "<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=" & userName & "));adspath;subtree

Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open "ADs Provider"
Set rs = conn.Execute(ldapStr)

While Not rs.EOF
   wscript.echo rs.Fields(0)
   rs.MoveNext
Wend
Run Code Online (Sandbox Code Playgroud)