0

我设法在没有从我的 ADS 域(例如,mydomain.com)中指定身份验证详细信息的情况下获取 ADS 用户。我使用了 ADODB.Connection 和 ADODB.Command。

我也有像 test.mydomain.com 这样的子域。如何通过指定属于 test.mydomain.com 的用户的身份验证详细信息从子域获取用户详细信息。

4

1 回答 1

1

您可以使用其 LDAP 名称作为搜索基础来查询来自受信任域的记录。但是,由于父域的 DC 不包含有关子域中对象的信息,它会生成一个引用。该ADODB.Command对象不会自动追踪该引用,因为相应的命名属性 "Chase referrals"默认为 0x00 ( ADS_CHASE_REFERRALS_NEVER)。您必须将该属性设置为以下两个值之一

  • ADS_CHASE_REFERRALS_SUBORDINATE(0x20)
  • ADS_CHASE_REFERRALS_ALWAYS(0x60)

使您的查询跟随推荐。例子:

base   = "<LDAP://dc=test,dc=example,dc=org>"
filter = "(&(objectCategory=computer)(name=foo*))"
attr   = "name,description"
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 & ";" & filter & ";" & attr & ";" & scope
cmd.Properties("Chase referrals") = &h60  ' <-- here

Set rs = cmd.Execute

我编写了一个包装类 ( ADQuery ) 来封装 Active Directory 查询的样板代码(因为我厌倦了一遍又一遍地编写它)。有了它,您可以将上述内容简化为以下内容:

Set qry = New ADQuery
qry.SearchBase = "dc=test,dc=example,dc=org"
qry.Filter     = "(&(objectCategory=computer)(name=foo*))"
qry.Attributes = Array("name", "description")

Set rs = qry.Execute

不过,无论哪种方式,您可能仍需要在 DC 上运行脚本。

于 2012-10-29T19:41:17.630 回答