有没有办法从ADO Command查询的响应中获取列的列表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法从ADO Command查询的响应中获取列的列表?相关的知识,希望对你有一定的参考价值。

我试图使用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;

以上是关于有没有办法从ADO Command查询的响应中获取列的列表?的主要内容,如果未能解决你的问题,请参考以下文章

ADO Command 对象

有没有办法使用普通 ADO 从 SQL Server 检索视图定义?

ADO.NET中的5个主要对象

ADO.NET中的五个主要对象

简述ADO.NET中的五个主要对象

如何使用 ADO.NET 从数据库中获取对象?