我设法在没有从我的 ADS 域(例如,mydomain.com)中指定身份验证详细信息的情况下获取 ADS 用户。我使用了 ADODB.Connection 和 ADODB.Command。
我也有像 test.mydomain.com 这样的子域。如何通过指定属于 test.mydomain.com 的用户的身份验证详细信息从子域获取用户详细信息。
您可以使用其 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 上运行脚本。