Directoryservices.directoryentry Vb Adodb

  • Автор темы Meites
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

Meites

#1
Код:
		Dim entry As New DirectoryServices.DirectoryEntry("<censored>")
Dim mySearcher As New System.DirectoryServices.DirectorySearcher(entry)
Dim result As System.DirectoryServices.SearchResult

Dim Record As Collection
ADFindUser = New Collection

mySearcher.Filter = ("(&(!objectClass=computer)(objectClass=user)(|(cn=*" & findstring & "*)(sAMAccountName=*" & findstring & "*)))")

For Each result In mySearcher.FindAll()
Record = New Collection
Record.Add(result.GetDirectoryEntry().Properties("cn").Value.ToString, "cn")
If result.GetDirectoryEntry().Properties("department").Value = Nothing Then
Record.Add("", "department")
Else
Record.Add(result.GetDirectoryEntry().Properties("department").Value.ToString, "department")
End If
If result.GetDirectoryEntry().Properties("mail").Value = Nothing Then
Record.Add("", "mail")
Else
Record.Add(result.GetDirectoryEntry().Properties("mail").Value.ToString, "mail")
End If
Record.Add(result.GetDirectoryEntry().Properties("distinguishedName").Value.ToString, "distinguishedName")
ADFindUser.Add(Record, result.GetDirectoryEntry().Properties("distinguishedName").Value)
Next
mySearcher = Nothing
entry.Close()
entry = Nothing
Код:
		Const ADS_SCOPE_SUBTREE = 2
Dim objConnection, objCommand, objRecordset As Object
Dim Record As Collection
ADFindUser = New Collection
objConnection = CreateObject("ADODB.Connection")
objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open("Active Directory Provider")
objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 10000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = "SELECT cn,canonicalName,createTimeStamp,department,displayname,distinguishedName,lastLo
gon,logonCount,pwdLastSet,sAMAccountName,title,useraccountcontrol,mail,accountEx
p
ires FROM 'LDAP://dc=<censored>,dc=<censored>' WHERE cn = '*" & findstring & "*' or sAMAccountName = '*" & findstring & "*' and objectCategory='person'"
objRecordset = objCommand.Execute
If objRecordset.RecordCount > 0 Then
objRecordset.MoveFirst()
Do Until objRecordset.EOF = True
Record = New Collection
Record.Add(objRecordset.fields("cn").value, "cn")
Record.Add(objRecordset.fields("createTimeStamp").value, "createTimeStamp")
Record.Add(objRecordset.fields("department").value, "department")
Record.Add(objRecordset.fields("displayname").value, "displayname")
Record.Add(objRecordset.fields("distinguishedName").value, "distinguishedName")
Record.Add(objRecordset.fields("logonCount").value, "logonCount")
Record.Add(objRecordset.fields("sAMAccountName").value, "sAMAccountName")
Record.Add(objRecordset.fields("title").value, "title")
Record.Add(objRecordset.fields("useraccountcontrol").value, "useraccountcontrol")
Record.Add(objRecordset.fields("mail").value, "mail")
ADFindUser.Add(Record, objRecordset.fields("distinguishedName").value)
objRecordset.MoveNext()
Loop
End If
objRecordset.Close()
objConnection.Close()
практически 2 этих куска кода делают одно и тоже, я понимаю, что написано немного криво но не суть..
1 работает очень медленно, 2 быстрее, но 2 сделан еще больше через жопу чем 1 8))
скажите как быть, использовать 2 метод... или что то переделать в 1...
проблема еще и в том, что в 1 случаи идёт долго поиск, долго чтение параметров...
что можете посоветовать?

вообще я писал всё изначально на vbs 8)) потом перенёс в vb.net всё идеально работало (2 вариант) потом переделал на объекты vb.net 2005 и такая фигня
 
Статус
Закрыто для дальнейших ответов.