Есть ли быстрый способ вытащить всех пользователей из Active Directory? - PullRequest
1 голос
/ 07 декабря 2009

Я пытаюсь вытащить имя пользователя каждого пользователя, доступного через активный каталог. Вот код, который мой коллега впервые попытался использовать, но этот метод сжигает всю память и выбрасывает исключения из памяти. Есть ли быстрая альтернатива?

Dim userList As ArrayList = New ArrayList
Dim sPath As String = "LDAP://test.ca/OU=foo,OU=bar,OU=foobar,DC=test,DC=ca"
Dim myDirectory As New DirectoryEntry(sPath, Nothing, Nothing, AuthenticationTypes.Secure)
Dim mySearcher As New DirectorySearcher(myDirectory)
mySearcher.Filter = ("(objectClass=user)")

For i As Integer = 0 To mySearcher.FindAll().Count - 1
    userList.Add(mySearcher.FindAll.Item(i).Properties("DisplayName").Item(0))
Next

Ответы [ 2 ]

2 голосов
/ 07 декабря 2009

Вызов FindAll возвращается на сервер LDAP каждый раз. Это означает, что вы выполняете его (и забиваете сервер) каждый раз, когда проходите цикл. Кроме того, если данные меняются между вызовами, вы, вероятно, увидите некоторые действительно странные (и трудно диагностируемые) ошибки.

На самом деле я не работаю с VB.NET, но что-то вроде этого должно работать:

Dim searchResults = mySearcher.FindAll()
For Each item In searchResults
    userList.Add(item.Properties("DisplayName").Item(0))
Next
1 голос
/ 07 декабря 2009

Если вы можете перейти на .NET 3.5, попробуйте LINQ для Active Directory .

...