Я раньше не работал с LDAP, поэтому я немного потерялся. Мне нужно подключиться к источнику LDAP, найти определенный атрибут и изменить его. Ввод для программы - это CSV файл со списком пользователей. Предполагается, что программа считывает UID из файла CSV, чтобы найти запись в LDAP и заменить определенный атрибут. Я не знаю, как это сделать. Может ли кто-нибудь указать мне в правильном направлении?
Запрос LDAP
Ответ 1
Первый элемент ответа, используя ADSI (старая мода)
Как сделать Почти все (с ADSI) в Active Directory с С#
Второй элемент ответа, начиная с .NET 3.5 Microsoft представляет "Принципала" и "Управление учетными записями".
Как сделать почти все (с помощью AccountManagement) в Active Directory с С#
Третий элемент ответа, вы можете использовать протокол низкого уровня (собственный LDAP) с System.DirectoryServices.Protocols(S.DS.P).
Примечание. Если вы заинтересованы в том, как опросить активный каталог из собственного кода, вы можете взглянуть на API-интерфейс LDAP C-Binding, описанный в RFC 1823, указывает, что Microsoft поддерживает его, см. Стратегия MS для облегченного протокола доступа к каталогам (LDAP). Вы найдете справочные руководства по использованию Microsoft API в протоколе LDAP.
Ответ 2
@KenL Почти добрался до меня. Я также должен был установить AuthenticationType DirectoryEntry, чтобы заставить его работать. Также обратите внимание на то, как вы используете подстановочные знаки (Kleene Stars).
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://some.ldap.server.com");
rootEntry.AuthenticationType = AuthenticationTypes.None; //Or whatever it need be
DirectorySearcher searcher = new DirectorySearcher(rootEntry);
var queryFormat = "(&(objectClass=user)(objectCategory=person)(|(SAMAccountName=*{0}*)(cn=*{0}*)(gn=*{0}*)(sn=*{0}*)(email=*{0}*)))";
searcher.Filter = string.Format(queryFormat, searchString);
foreach(SearchResult result in searcher.FindAll())
{
Console.WriteLine("account name: {0}", result.Properties["samaccountname"].Count > 0 ? result.Properties["samaccountname"][0] : string.Empty);
Console.WriteLine("common name: {0}", result.Properties["cn"].Count > 0 ? result.Properties["cn"][0] : string.Empty);
}
Ответ 3
код мудрый намного проще, чем вы думаете. Вам необходимо создать соединение с каталогом, настроить поисковик, затем выполнить поиск по имени свойства.
DirectoryEntry entry = new DirectoryEntry("LDAP://MyDomain.com");
DirectorySearcher dSearch = new DirectorySearcher(entry);
dSearch.Filter = "(&(objectCategory=person)(objectClass=user)(" + SType + "=" + Name + "))";
SType - это тип имени, а Name - фактическое имя пользователя