Важно отметить, что вы делаете дополнительный сетевой запрос там, где вам это не нужно.Сначала я расскажу о поиске.
Все имена полей, которые вы возвращаете при поиске, указаны в 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