Конечно, вы можете сделать это в System.DirectoryServices.
Я думаю, что вам действительно нужно научиться использовать System.DirectoryServices .Если у вас еще нет хорошей книги, я рекомендую эту .
Это не так сложно, правда.Вам просто нужно освоить два класса, DirectoryEntry и DirectorySearcher . DirectoryEntry представляет объект LDAP на сервере LDAP.Предполагая, что у вас есть достаточные разрешения, вы можете вносить изменения в любой объект LDAP, включая объект контакта, используя DirectoryEntry .Каждый объект LDAP имеет ряд атрибутов.Два важных атрибута, которые вам нужно знать, это objectCategory
и objectClass
.Для контактного объекта objectCategory
должно быть person
, а objectClass
должно быть contact
.Вы также можете проверить атрибут targetAddress объекта контакта, в котором хранится адрес электронной почты.Существует несколько расширенных атрибутов Exchange для объекта контакта.Вы, вероятно, хотели бы проверить каждого из них по одному.Для просмотра объектов на сервере LDAP вы можете использовать инструмент, такой как AD Explorer или ADSI Edit
Чтобы выполнить поиск, вам нужно предоставить четыре вещи для DirectorySearcher .
- Поиск корня
- Фильтр поиска LDAP
- Область поиска
- Возвращенные атрибуты
Если ваша машина уже присоединена к домену и вы входите в систему как пользователь домена, вот пример того, как вывести список всех контактов в вашем домене.
DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");
string domainContext = rootDSE.Properties["defaultNamingContext"].Value as string;
DirectoryEntry searchRoot = new DirectoryEntry("LDAP://" + domainContext);
using (DirectorySearcher searcher = new DirectorySearcher(
searchRoot,
"(&(objectCategory=person)(objectClass=contact))",
new string[] {"targetAddress"},
SearchScope.Subtree))
{
foreach (SearchResult result in searcher.FindAll())
{
foreach (string addr in result.Properties["targetAddress"])
{
Console.WriteLine(addr);
}
Console.WriteLine(result.Path);
}
}
Первые три строкичтобы помочь вам найти правильный путь LDAP к корню вашего домена.Это работает, только если вы входите в систему как пользователь домена.Если вы знаете правильный путь LDAP вашего домена, вы можете просто передать его непосредственно в DirectoryEntry.
Я поместил все четыре параметра в DirectorySearcher .Когда вы знакомитесь с программированием служб каталогов, вы можете пропустить некоторые из них, и .NET предоставит вам значение по умолчанию.
Результат, возвращаемый DiectorySearcher , равен SearchResult .Обратите внимание, что SearchResult всегда возвращает коллекцию объектов, даже если targetAddress
не является многозначным атрибутом.Это потому, что некоторые атрибуты объекта LDAP могут быть многозначными.
Другая важная информация, которую вы можете получить от SearchResult - это Path
.Вы можете создать объект DirectoryEntry , используя этот путь позже.Чтобы обновить свой контактный объект, вам нужно использовать его метод Properties
и метод CommitChanges
.
DirectoryEntry de = new DirectoryEntry(result.Path);
de.Properties["targetAddress"].Value = "SMTP:jane.doe@foo.bar";
de.CommitChanges();
Наконец, вы можете легко найти множество онлайн-руководств по обоим DirectorySearcher и DirectoryEntry .Попробуйте Google.