我设法让ADS用户无需从我的ADS域(例如,mydomain.com)指定身份验证详细信息。我使用了ADODB.Connection和ADODB.Command。
我也有像test.mydomain.com这样的子域名。如何通过指定属于test.mydomain.com的用户的身份验证详细信息从子域获取用户详细信息。
答案 0 :(得分:1)
您可以使用LDAP名称作为搜索库来查询受信任域中的记录。但是,由于父域的DC不包含子域中对象的信息,因此它将生成referral。 ADODB.Command
对象不会自动chase引用,因为相应的named property "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上运行脚本。