Codice di esempio per l'utilizzo dell'intervallo per recuperare i membri di un gruppo
Nell'esempio di codice seguente viene usato l'intervallo con ActiveX Directory Objects (ADO) per recuperare i membri di un gruppo.
Il frammento di codice seguente richiede un riferimento alla libreria Microsoft ActiveX Data Objects 6.0.
Private Sub EnumGroupWithADO(ByVal strGroupDN As String, ByVal strUsername As String, ByVal strPassword As String)
Dim oConn
Dim oComm
Dim rangeStep
Dim lowRange
Dim highRange
Dim lastLoop
Dim commandPrefix
Dim amp
Dim commandSuffix
Dim oRS
Dim nRetrieved
oConn = CreateObject("ADODB.Connection")
oComm = CreateObject("ADODB.Command")
oConn.Provider = "ADsDSOObject"
oConn.Properties("ADSI Flag") = 1
If strUsername <> "" Then
oConn.Properties("User ID") = strUsername
oConn.Properties("Password") = strPassword
End If
oConn.Open()
oComm.ActiveConnection = oConn
' For compatibility with all operating systems, the number of objects
' retrieved by each query should not exceed 999.
rangeStep = 999
lastLoop = False
lowRange = 0
highRange = lowRange + rangeStep
commandPrefix = "<LDAP://" & strGroupDN > ">;(objectClass=*);member;range="
commandSuffix = ";base"
Do
If lastLoop Then
' Perform this query with the "range=<lowRange>-*" range.
oComm.CommandText = commandPrefix & lowRange & "-*" & commandSuffix
Else
' Perform this query with the "range=<lowRange>-<highRange>" range.
oComm.CommandText = commandPrefix & lowRange & "-" & highRange & commandSuffix
End If
Debug.Print("Current search command: " & oComm.CommandText)
' Execute the query.
oRS = oComm.Execute
' Reset the retrieved members counter.
nRetrieved = 0
' Enumerate the retrieved members.
While Not oRS.EOF
For Each oField In oRS.Fields
If VarType(oField) = (vbArray + vbVariant) Then
For Each oValue In oField.Value
Debug.Print(vbTab & oValue)
nRetrieved = nRetrieved + 1
Next
End If
Next
oRS.MoveNext()
End While
' If the last query was performed, exit the loop.
If lastLoop = True Then
Exit Do
End If
If nRetrieved = 0 Then
' No objects were retrieved by the last query; perform one last query
' with the “range=<lowRange>-*†range.
lastLoop = True
Else
' Increment the high and low ranges to query for the next block of objects.
lowRange = highRange + 1
highRange = lowRange + rangeStep
End If
Loop While nRetrieved = lowRange
End Sub
End Module