是否有快速方法从Active Directory中提取所有用户?

时间:2009-12-07 18:33:16

标签: c# vb.net .net-2.0 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

2 个答案:

答案 0 :(得分:2)

每次调用FindAll都会返回LDAP服务器。这意味着每次绕过循环时都要执行它(并锤击服务器)。最重要的是,如果数据在调用之间发生变化,您可能会看到一些非常奇怪(并且难以诊断)的错误。

我没有真正做VB.NET,但这样的事情应该有效:

Dim searchResults = mySearcher.FindAll()
For Each item In searchResults
    userList.Add(item.Properties("DisplayName").Item(0))
Next

答案 1 :(得分:1)

如果您可以转到.NET 3.5,请尝试LINQ to Active Directory