【问题标题】:Querying Active Directory using VBScript使用 VBScript 查询 Active Directory
【发布时间】:2010-11-08 14:05:21
【问题描述】:

我想使用 VBScript(经典 ASP)查询Active Directory。 我怎样才能做到这一点?

【问题讨论】:

标签: asp-classic vbscript active-directory


【解决方案1】:

要查看一个 OU 的所有成员,试试这个...

Set objOU = GetObject("LDAP://OU=YourOU,DC=YourDomain,DC=com")
For each objMember in ObjOU  ' get all the members'

    ' do something'

Next

要对 DN 进行自定义搜索,试试这个...

set conn = createobject("ADODB.Connection")
Set iAdRootDSE = GetObject("LDAP://RootDSE")
strDefaultNamingContext = iAdRootDSE.Get("defaultNamingContext")
Conn.Provider = "ADsDSOObject"
Conn.Open "ADs Provider"

strQueryDL = "<LDAP://" & strDefaultNamingContext & ">;(&(objectCategory=person)(objectClass=user));distinguishedName,adspath;subtree"
set objCmd = createobject("ADODB.Command")
objCmd.ActiveConnection = Conn
objCmd.Properties("SearchScope") = 2 ' we want to search everything
objCmd.Properties("Page Size") = 500 ' and we want our records in lots of 500 

objCmd.CommandText = strQueryDL
Set objRs = objCmd.Execute

While Not objRS.eof

    ' do something with objRS.Fields("distinguishedName")'
    objRS.MoveNext
Wend

【讨论】:

  • Ken,如果我想获取特定 FirstName 和 LastName 值的“sAMAccountName”值,根据您的第一个示例,我会这样做 If ObjOU.FirstName = "Alan" and ObjOU.LastName = "Smith" then sVariable = ObjOU.sAMAccountName 这样对吗?
  • 更好的方法是实际使用您在查询中查找的特定名字/姓氏... strQueryDL = ";(&(objectCategory =person)(objectClass=user)(firstName="Alan")(lastName="Smith");distinguishedName,adspath;subtree" ... ' 用 objRS.Fields("sAMAccountName")' 做点什么
【解决方案2】:

你想使用Active Directory Service Interfaces (ADSI)

ADSI Scripting Primer 是开始学习和查找示例的好地方。 (顺便说一句,这些链接指的是 Windows 2000,但也适用于 Windows 的后续版本)。

【讨论】:

    【解决方案3】:

    我必须通过 oldskool 用户名查询 WinAD,这个 .vbs 脚本会打印用户帐户。

    • 按 sAMAccountname 查找,使用 * 通配符
    • 打印每个用户对象的一些属性
    • 使用 AccountType 过滤其迭代 AD 用户对象的最优化方式

    测试脚本首先通过完全限定字符串获取用户对象,这只是一个示例。第二部分通过 smith* 过滤器进行实际查询。

    WinADSearch.vbs

    ' c:> cscript -nologo script.vbs
    ' c:> wscript script.vbs
    ' http://msdn.microsoft.com/en-us/library/d6dw7aeh%28v=vs.85%29.aspx
    
    ' WindowsAD queries
    ' http://www.kouti.com/tables/userattributes.htm
    
    Option Explicit
    'On Error Resume Next
    
    Dim StdOut: Set StdOut = WScript.StdOut
    
    Dim objUser
    Set objUser = GetObject("LDAP://CN=Firstname Lastname,OU=Internal Users,OU=MyCompany,OU=Boston,OU=Root,DC=REGION1,DC=COM")
    println(objUser.givenName & " " & objUser.middleName & " " & objUser.lastName) 
    println("name=" & objUser.name)
    println("displayName=" & objUser.displayName)
    println("userPrincipalName=" & objUser.userPrincipalName)
    println("sAMAccountName=" & objUser.sAMAccountName)
    println("distinguishedName=" & objUser.distinguishedName)
    
    
    println("")
    Dim conn, strQueryDL, strAttrs, objCmd, objRs, idx
    
    set conn = createobject("ADODB.Connection")
    conn.Provider = "ADsDSOObject"
    conn.Open "ADs Provider"
    
    strAttrs = "sAMAccountName,displayName,distinguishedName" ' get attributes
    
    'strQueryDL = "<LDAP://dc=REGION1,dc=COM>;(& (objectCategory=person) );" & strAttrs & ";SubTree"
    'strQueryDL = "<LDAP://dc=REGION1,dc=COM>;(& (objectCategory=person)(objectClass=user) );" & strAttrs & ";SubTree"    
    'strQueryDL = "<LDAP://dc=REGION1,dc=COM>;(& (objectCategory=person)(objectClass=user)(sAMAccountName=smith*) );" & strAttrs & ";SubTree"
    
    strQueryDL = "<LDAP://dc=REGION1,dc=COM>;(& (samAccountType=805306368)(sAMAccountName=smith*) );" & strAttrs & ";SubTree"
    
    set objCmd = createobject("ADODB.Command")
    objCmd.ActiveConnection = Conn
    objCmd.Properties("SearchScope") = 2 ' search everything
    objCmd.Properties("Page Size") = 100 ' bulk operation
    
    objCmd.CommandText = strQueryDL
    println(objCmd.CommandText)
    Set objRs = objCmd.Execute
    idx=0
    do while Not objRS.eof
      idx=idx+1
      println( objRs.Fields("sAMAccountName") & " / " & objRs.Fields("displayName") & " / " & objRs.Fields("distinguishedName") )
      if (idx>5) then exit do
      objRS.MoveNext
    loop
    objRs.Close
    Conn.close
    set objRs = Nothing
    set conn = Nothing
    println("end")
    
    
    '********************************************************************
    Sub println(ByVal str) 
        If (StdOut Is Nothing) Then Exit Sub
        StdOut.WriteLine str
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      相关资源
      最近更新 更多