Optimierung mithilfe von GetInfoEx
Die IADs.GetInfoEx-Methode wird verwendet, um bestimmte Attributwerte aus dem zugrunde liegenden Verzeichnisdienst in den lokalen Cache zu laden. Diese Methode lädt nur die angegebenen Attributwerte in den lokalen Cache. Die IADs.GetInfo-Methode wird verwendet, um alle Attributwerte in den lokalen Cache zu laden.
Die IADs.GetInfoEx-Methode ruft bestimmte aktuelle Werte für die Eigenschaften eines Active Directory-Objekts aus dem zugrunde liegenden Verzeichnisspeicher ab und aktualisiert die zwischengespeicherten Werte.
Wenn jedoch bereits ein Wert im Eigenschaftencache vorhanden ist, ruft der Aufruf der IADs.Getex - oder IADs.GetEx-Methode ohne den ersten Aufruf von IADs.GetInfoEx für dieses Attribut den zwischengespeicherten Wert anstelle des aktuellen Werts aus dem zugrunde liegenden Verzeichnis ab. Dies kann dazu führen, dass aktualisierte Attributwerte überschrieben werden, wenn der lokale Cache geändert wurde, die Werte jedoch nicht mit einem Aufruf der IADs.SetInfo-Methode an den zugrunde liegenden Verzeichnisdienst committet wurden. Die empfohlene Methode zum Vermeiden von Zwischenspeicherungsproblemen besteht darin, Attributwertänderungen immer durch Aufrufen von IADs.SetInfo vor dem Aufruf von IADs.GetInfo zu committen.
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
Abrufen von konstruierten Active Directory-Attributen
In Active Directory werden die meisten konstruierten Attribute abgerufen und zwischengespeichert, wenn die IADs.GetInfo-Methode aufgerufen wird (IADs.Get führt einen impliziten IADs.Get-Aufruf aus, wenn der Cache leer ist). Einige konstruierte Attribute werden jedoch nicht automatisch abgerufen und zwischengespeichert und erfordern daher, dass die IADs.GetInfoEx-Methode explizit aufgerufen wird, um sie abzurufen. In Active Directory wird beispielsweise das canonicalName-Attribut nicht abgerufen, wenn die IADs.GetInfo-Methode aufgerufen wird, und IADs.Get gibt E_ADS_PROPERTY_NOT_FOUND zurück. Die IADs.GetInfoEx-Methode muss aufgerufen werden, um das canonicalName-Attribut abzurufen. Die gleichen konstruierten Attribute werden auch nicht mithilfe der IADsPropertyList-Schnittstelle abgerufen, um die Attribute aufzulisten.
Weitere Informationen und ein Codebeispiel zum Abrufen aller Attributwerte finden Sie unter Beispielcode zum Lesen eines konstruierten Attributs.