1

Я пытаюсь получить полный список пользователей вместе с их адресом электронной почты. Перепробовав много вещей ниже, наконец, дал мне некоторую форму радости, однако я получаю эту ошибку эту ошибку:DirectoryServices Search Out of Range Error

A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll 

Кто-нибудь знает, почему это происходит и как это предотвратить? Полный код приведен ниже.

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() 

ответ

0

Похоже, это если res.Properties есть ключи «сп» и «почта» со значениями, которые являются массивами, которые имеют, по меньшей мере, один элемент в них.

res.Properties ("сп") (0) .ToString()

Это говорит «преобразовать первый элемент в массиве из res.Properties, ключ имя сп в строку. ' Такие звуки сбивают с толку, потому что это так. И это предполагает, что вы знаете :

  1. res.Properties имеет элемент, ключ имя сп
  2. Этот элемент имеет значение, тип массива
  3. Этот массив имеет элемент в нем на месте 0
  4. элемент в месте, может быть преобразован в строку

Попробуйте проверить это, прежде чем пытаться для доступа к ним. Я не занимался какой-либо спецификой для конкретного типа, но ниже должен работать.

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 

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