我试图使用VBscript获取Active Directory(AD)用户(和相关信息)的列表。问题是我不知道如何获得已接收列的完整列表。
我试图看(通过使用Visual Studio 2017的调试器)什么是响应(对象“objUser”),但调试器只显示点。
主要集合:
Set objCommand = CreateObject("ADODB.Command")
strQuery = "<LDAP://" + strDNSDomain + ">;(&(&(objectCategory=person)(objectSid=*)(!samAccountType:1.2.840.113556.1.4.804:=3)));objectGUID;subtree"
objCommand.CommandText = strQuery
Set objRecordSet = objCommand.Execute
循环处理
Do Until objRecordSet.EOF
strLine = ""
arrbytGuid = objRecordSet.Fields("objectGUID")
strDN = "<GUID=" + OctetToHexStr(arrbytGuid) + ">"
Set objUser = GetObject("LDAP://" & strDN)
If (Not IsNull(objUser.SAMAccountName)) Then
strLine = CStr(objUser.SAMAccountName)
End If
objRecordSet.MoveNext
Loop
我想了解除“SAMAccountName”之外的“objUser”中还有哪些列。
请注意,您需要在不需要的地方进行额外的网络请求。我先讨论一下搜索。
您在搜索中返回的所有字段名称都在objRecordSet.Fields
中。你只看到objectGUID
,因为这就是你所要求的。
查询中的;objectGUID;
是您列出(逗号分隔)要返回的属性的位置。
额外的网络请求发生在此之后:
Set objUser = GetObject("LDAP://" & strDN)
您直接绑定到对象,只是为了读取属性。更具体地说,一旦您访问属性(objUser.SAMAccountName
),它就会转到AD并加载属性。同样的原则适用于此:如果您没有明确告诉它您想要哪些属性,它将使用值加载每个属性。这会减慢你的循环,你不需要这样做,因为你可以阅读你需要从搜索中读取的所有内容。
相反,让搜索返回您需要的一切。如果您需要qazxsw poi,请添加:qazxsw poi。
搜索后直接绑定到对象的唯一原因是您是否需要更新它。
但是要专门回答你问的问题,这就是你如何使用sAMAccountName
直接绑定对象后看到的对象:
;objectGUID,sAMAccountName;