vbscript,通过架构属性验证用户是否在active directory中

vbscript,通过架构属性验证用户是否在active directory中,vbscript,active-directory,schema,Vbscript,Active Directory,Schema,我正在尝试编写一个vb脚本,提示用户输入一个模式属性,我将其称为bID,并检查具有该bID的人是否在active directory中。我真的不知道如何开始,有很多关于如何查询active directory用户的例子,但我还没有找到一个关于检查特定属性的好例子。非常感谢您的帮助/建议 更新: 好的,这是到目前为止我的代码,没有出错并返回0,但由于某种原因,我没有得到可分辨名称的wscript.echo。我包括了一些调试wscript.echo的代码,它似乎永远不会进入while循环。有什么想法

我正在尝试编写一个vb脚本,提示用户输入一个模式属性,我将其称为bID,并检查具有该bID的人是否在active directory中。我真的不知道如何开始,有很多关于如何查询active directory用户的例子,但我还没有找到一个关于检查特定属性的好例子。非常感谢您的帮助/建议

更新: 好的,这是到目前为止我的代码,没有出错并返回0,但由于某种原因,我没有得到可分辨名称的wscript.echo。我包括了一些调试wscript.echo的代码,它似乎永远不会进入while循环。有什么想法吗

Option Explicit

GetUsers "CN=users,DC=example,DC=example,DC=example,DC=com","123456"

Function GetUsers(domainNc, ID)
    Dim cnxn    
    Set cnxn = WScript.CreateObject("ADODB.Connection")    
    cnxn.Provider = "ADsDSOObject"    
    cnxn.Open "Active Directory Provider"    
    Dim cmd    
    Set cmd = WScript.CreateObject("ADODB.Command")    
    cmd.ActiveConnection = cnxn    
    cmd.CommandText = "<LDAP://" & domainNc & ">;(&(objectCategory=user)(objectClass=user)    (employeeNumber=" & ID & "));distinguishedName;subtree"
    WScript.Echo cmd.CommandText
    cmd.Properties("Page Size") = 100    
    cmd.Properties("Timeout") = 30    
    cmd.Properties("Cache Results") = False    
    WScript.Echo "setting cmd.properties"
    Dim rs
    Set rs = cmd.Execute
    WScript.Echo "rs object set"
    While Not rs.eof
        On Error Resume Next
        WScript.Echo "while loop start"
        Wscript.Echo rs.fields("distinguishedName".Value)
        rs.MoveNext
        If (Err.Number <> 0) Then       
     WScript.Echo vbCrLf& "Error # "& CStr(Err.Number)& " "& Err.Description
        Else
      On Error GoTo 0
        End If 
    Wend
    WScript.Echo "while loop end"
    rs.close    
    WScript.Echo "rs object closed"
    cnxn.Close    
    Set rs = Nothing    
    Set cmd = Nothing    
    Set cnxn = Nothing 
    End Function
选项显式
GetUsers“CN=users,DC=example,DC=example,DC=example,DC=com”,“123456”
函数GetUsers(domainNc,ID)
Dim cnxn
设置cnxn=WScript.CreateObject(“ADODB.Connection”)
cnxn.Provider=“ADsDSOObject”
cnxn.打开“Active Directory提供程序”
Dim命令
Set cmd=WScript.CreateObject(“ADODB.Command”)
cmd.ActiveConnection=cnxn
cmd.CommandText=“;(&(objectCategory=user)(objectClass=user)(employeeNumber=“&ID&”);DifferentizedName;子树”
WScript.Echo cmd.CommandText
cmd.Properties(“页面大小”)=100
cmd.Properties(“超时”)=30
cmd.Properties(“缓存结果”)=False
Echo“设置cmd.properties”
暗淡的
设置rs=cmd.Execute
Echo“rs对象集”
而不是卢比
出错时继续下一步
Echo“while循环启动”
Wscript.Echo rs.fields(“DiscrimitedName.Value”)
下一个
如果(错误编号0),则
WScript.Echo vbCrLf&“Error#”和CStr(Err.Number)&“Err.Description”
其他的
错误转到0
如果结束
温德
Echo“while循环结束”
克洛斯
Echo“rs对象已关闭”
关闭
设置rs=无
Set cmd=Nothing
设置cnxn=无
端函数

这里有一些vbscript,可以找到所有bID=FooVal的用户并写出他们的DN

Function GetUsers(domainNc, bIdVal)
    Dim cnxn
    Set cnxn = WScript.CreateObject("ADODB.Connection")
    cnxn.Provider = "ADsDSOObject"
    cnxn.Open "Active Directory Provider"

    Dim cmd
    Set cmd = WScript.CreateObject("ADODB.Command")
    cmd.ActiveConnection = cnxn

    cmd.CommandText = "<LDAP://" & domainNc & ">;(&(objectCass=user)(objectCategory=person)(bid=" & bidVal & "));distinguishedName;subtree"
    cmd.Properties("Page Size") = 100
    cmd.Properties("Timeout") = 30
    cmd.Properties("Cache Results") = False

    Dim rs
    Set rs = cmd.Execute

    While Not rs.eof 
        Wscript.Echo rs.fields("distinguishedName").Value

        rs.MoveNext
    Wend 

    rs.close
    cnxn.Close

    Set rs = Nothing
    Set cmd = Nothing
    Set cnxn = Nothing 
End Function
函数GetUsers(domainNc、bIdVal) Dim cnxn 设置cnxn=WScript.CreateObject(“ADODB.Connection”) cnxn.Provider=“ADsDSOObject” cnxn.打开“Active Directory提供程序” Dim命令 Set cmd=WScript.CreateObject(“ADODB.Command”) cmd.ActiveConnection=cnxn cmd.CommandText=“;(&(objectCass=user)(objectCategory=person)(bid=“&bidVal&”);DiscrimitedName;子树” cmd.Properties(“页面大小”)=100 cmd.Properties(“超时”)=30 cmd.Properties(“缓存结果”)=False 暗淡的 设置rs=cmd.Execute 而不是卢比 Wscript.Echo rs.fields(“DifferentizedName”).Value 下一个 温德 克洛斯 关闭 设置rs=无 Set cmd=Nothing 设置cnxn=无 端函数
感谢brian的回复!我已修改domainNc以包含我们的DC信息,但它返回:
(32,5)Provider:从服务器返回了一个引用。
这是否意味着我的DC信息有误,或者属性类型有误?attriute类型区分大小写吗?嘿,brian,谢谢你的帮助,我离你很近,我能感觉到!我更新了上面的代码,它似乎工作(返回0),但我从来没有得到一个可分辨名称的wscript.echo,有什么想法吗?嘿,伙计们,上面的脚本运行时没有错误(返回0),但我从来没有从while循环中得到任何wscript.echos,有什么想法吗?语法是错误的。将行更改为:Wscript.Echo rs.fields(“DifferentizedName”).Value