来自vbs文件的ADS用户详细信息 - 子域

时间:2012-10-15 14:25:45

标签: vbscript adsi

我设法让ADS用户无需从我的ADS域(例如,mydomain.com)指定身份验证详细信息。我使用了ADODB.Connection和ADODB.Command。

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

1 个答案:

答案 0 :(得分:1)

您可以使用LDAP名称作为搜索库来查询受信任域中的记录。但是,由于父域的DC不包含子域中对象的信息,因此它将生成referralADODB.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上运行脚本。