2009-12-07 2 views
1

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

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 
+0

Я не сделал это в AD, но в LDAP, скажите LDAP вы просто хотите отображаемое_имя возвратившись, который будет более короткий список. –

ответ

2

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

Я не действительно VB.NET, но что-то, как это должно работать:

Dim searchResults = mySearcher.FindAll() 
For Each item In searchResults 
    userList.Add(item.Properties("DisplayName").Item(0)) 
Next 
Смежные вопросы