Есть ли способ получить список столбцов из ответа на запрос команды ADO? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь получить список пользователей Active Directory (AD) (и связанную информацию), используя VBscript. Проблема в том, что я не знаю, как получить полный список полученных столбцов.

Я пытался посмотреть (с помощью отладчика 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

Я хочу понять, какие еще столбцы есть в "objUser", кроме "SAMAccountName".

1 Ответ

1 голос
/ 08 апреля 2019

Важно отметить, что вы делаете дополнительный сетевой запрос там, где вам это не нужно.Сначала я расскажу о поиске.

Все имена полей, которые вы возвращаете при поиске, указаны в objRecordSet.Fields.Вы видите только objectGUID, потому что это все, что вы просили.

* В вашем запросе ;objectGUID; указан список (через запятую) атрибутов, которые вы хотите вернуть.

Дополнительная сетьзапрос происходит после этого:

Set objUser = GetObject("LDAP://" & strDN)

Вы привязываетесь к объекту напрямую, просто для чтения атрибутов.Более конкретно, когда вы получаете доступ к свойству (objUser.SAMAccountName), оно отправляется в AD и загружает атрибуты.И здесь применяется тот же принцип: если вы не укажете, какие именно атрибуты вам нужны, он загрузит каждый атрибут со значением.Это замедлит ваш цикл, и вам не нужно это делать, так как вы можете прочитать все, что нужно, чтобы прочитать из поиска.

Вместо этого получите поиск, чтобы вернуть все, что вам нужно.Если вам тоже нужно sAMAccountName, добавьте его: ;objectGUID,sAMAccountName;.

Единственная причина привязки непосредственно к объекту после поиска - это необходимость обновить его.


Но чтобы конкретно ответить на заданный вами вопрос, вот как вы можете увидеть, какие атрибуты у объекта после привязки непосредственно к нему, используя GetObject():

Set objUser = GetObject("LDAP://" & strDN)
objUser.GetInfo() 'Retrieve all attributes with a value

For I = 0 To objUser.PropertyCount - 1
   Set pEntry = objUser.Item(I)
   Wscript.Echo pEntry.Name
Next
...