Оптимизация с помощью GetInfoEx
Метод IADs.GetInfoEx используется для загрузки определенных значений атрибутов в локальный кэш из базовой службы каталогов. Этот метод загружает только указанные значения атрибутов в локальный кэш. Метод IADs.GetInfo используется для загрузки всех значений атрибутов в локальный кэш.
Метод IADs.GetInfoEx получает определенные текущие значения свойств объекта Active Directory из базового хранилища каталогов, обновляя кэшированные значения.
Если значение уже существует в кэше свойств, однако вызов метода IADs.Get или IADs.GetEx без первого вызова IADs.GetInfoEx для этого атрибута извлекает кэшированное значение, а не самое текущее значение из базового каталога. Это может привести к перезаписи обновленных значений атрибутов, если локальный кэш был изменен, но значения не были зафиксированы в базовой службе каталогов с вызовом метода IADs.SetInfo . Предлагаемый метод предотвращения проблем кэширования заключается в том, чтобы всегда фиксировать изменения значения атрибута путем вызова IADs.SetInfo перед вызовом IADs.GetInfo.
Dim usr As IADs
Dim PropArray As Variant
On Error GoTo Cleanup
' Bind to a specific user object.
Set usr = GetObject("LDAP://CN=Jeff Smith,CN=Users,DC=fabrikam,DC=com")
' The code example assumes that the property description has a single value in the directory.
' Be aware that this will implicitly call GetInfo because, at this point, GetInfo
' has not yet been called (implicitly or explicitly) on the usr object.
Debug.Print "User's common name is " + usr.Get("cn")
Debug.Print "User's title is " + usr.Get("title")
Debug.Print "User's department is " + usr.Get("department")
' Change two of the attribute values in the local cache.
usr.Put "cn", "Jeff Smith"
usr.Put "title", "Vice President"
usr.Put "department", "Head Office"
Debug.Print "User's common name is " + usr.Get("cn")
Debug.Print "User's title is " + usr.Get("title")
Debug.Print "User's department is " + usr.Get("department")
' Initialize the array of properties to pass to GetInfoEx.
PropArray = Array("department", "title")
' Get the specified attribute values.
usr.GetInfoEx PropArray, 0
' The specific attributes values were overwritten, but the attribute
' value not retrieved has not changed.
Debug.Print "User's common name is " + usr.Get("cn")
Debug.Print "User's title is " + usr.Get("title")
Debug.Print "User's department is " + usr.Get("department")
Cleanup:
If (Err.Number<>0) Then
MsgBox("An error has occurred. " & Err.Number)
End If
Set usr = Nothing
Получение созданных атрибутов Active Directory
В Active Directory большинство созданных атрибутов извлекаются и кэшируются при вызове метода IADs.GetInfo (IADs.Get выполняет неявный вызов IADs.GetInfo, если кэш пуст). Однако некоторые созданные атрибуты не извлекаются и кэшируются автоматически, поэтому требуется, чтобы метод IADs.GetInfoEx был вызван явным образом для их извлечения. Например, в Active Directory атрибут канонического имени не извлекается при вызове метода IADs.GetInfo и IADs.Get возвращает E_ADS_PROPERTY_NOT_FOUND. Метод IADs.GetInfoEx должен вызываться для получения атрибута каноническогоname . Эти же созданные атрибуты также не будут извлекаться с помощью интерфейса IADsPropertyList для перечисления атрибутов.
Дополнительные сведения и пример кода, демонстрирующий получение всех значений атрибутов, см. в примере кода для чтения созданного атрибута.