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