我正在尝试获取完整的用户列表及其电子邮件地址。在尝试了很多事情之后,下面最终给了我一些喜悦但是我得到了这个错误这个错误:
Dim entry As DirectoryEntry = Nothing
Dim search As DirectorySearcher = Nothing
entry = New DirectoryEntry()
search = New DirectorySearcher()
search.Filter = "(&(objectCategory=person)(objectClass=user)(mail=*@companyname.com*))"
search.Sort.PropertyName = "cn"
Dim result As SearchResultCollection = search.FindAll()
For Each res As SearchResult In result
Dim Name = res.Properties("cn")(0).ToString()
Dim Email = res.Properties("mail")(0).ToString()
WindowsForm1.ListBox1.Items.Add(Name & " <" & Email & ">")
Next
entry.Dispose()
search.Dispose()
result.Dispose()
有人知道为什么会这样,以及如何防止这种情况发生? 完整的代码如下。
test1.sec.com 192.168.1.8:8001<br>
test2.sec.com 192.168.1.8:8002<br>
test3.sec.com 192.168.1.8:8003<br>
http://www.sec.com/test1/ 192.168.1.8:8001<br>
http://www.sec.com/test2/ 192.168.1.8:8002<br>
http://www.sec.com/test3/ 192.168.1.8:8003<br>
答案 0 :(得分:0)
看起来这是假设res.Properties有键&#34; cn&#34;和&#34;邮件&#34;值为具有至少一个元素的数组。
<强> res.Properties(&#34; CN&#34)(0)的ToString()强>
这表示将数组中的第一个元素从名称为 cn 的res.Properties转换为字符串。&#39;那种听起来很混乱,因为它是。它假设你知道:
在尝试访问它们之前,请尝试检查这些内容。我没有考虑任何特定类型的功能,但下面应该可以使用。
Dim Name, Email as String
If Not IsNothing(res.Properties("cn")) AndAlso res.Properties("cn").Count > 0 AndAlso Not IsNothing(res.Properties("mail")) AndAlso res.Properties("mail").Count > 0 Then
Name = res.Properties("cn")(0)
Email = res.Properties("mail")(0)
End If
这应该更加清理,但想法和根本原因是一样的 - 我们试图避免访问数组的值,直到我们确定我们有一个值有待访问的值的数组首先。始终验证您的数据。