Я пытаюсь составить список всех пользователей, находящихся в подразделении организации в домене, используя LDAP (DirectorySearcher class
).
Домен, к которому я подключаюсь, не является текущим доменом, и подразделение, на которое я пытаюсь взглянуть, находится на очень глубоком пути, некоторые имена подразделений повторяются в другом месте, например:
MyDomain.LOCAL / MyCompany / Клиенты / Contoso / Финансовый сайт / Финансовые услуги / Пользователи
Я могу перечислить всех пользователей в домене с помощью следующего кода:
// Build the directory entry
var directoryEntry = new DirectoryEntry(_ldapServer, _domain + "\\" +
_systemUser, _systemPassword);
try
{
// Bind to the native AdsObject to force authentication of the system user.
// It will throw an exception if this is an invalid account
object obj = directoryEntry.NativeObject;
}
catch (Exception ex)
{
throw new Exception("Error authenticating system user. " + ex.Message, ex);
}
// create a directory searcher for that OU
DirectorySearcher users = new DirectorySearcher(directoryEntry);
// set the filter to get just the users
users.Filter = "(&(objectClass=user)(objectCategory=Person))";
// add the attributes you want to grab from the search
users.PropertiesToLoad.Add("givenName");
users.PropertiesToLoad.Add("sn");
users.PropertiesToLoad.Add("mail");
users.PropertiesToLoad.Add("name");
// grab the users and do whatever you need to do with them
var allFound = users.FindAll();
foreach (SearchResult oResult in allFound)
{
// etc
}
Это работает и захватывает огромный список всех пользователей, которые находятся в корне (домене).
Тем не менее, я хочу получить пользователей под определенным подразделением.
Я пробовал следующую строку:
var directoryEntry = new DirectoryEntry(_ldapServer +
"/ou=MyCompany/Clients/Contoso/Financial Site/Financial Services/Users",
_domain + "\\" + _systemUser, _systemPassword);
И я получаю ошибку:
Error authenticating system user. An operations error occurred.
Кто-нибудь знает, как мне быть более точным в DirectorySearcher
для OU, в котором я заинтересован?
<ч />
РЕШИТЬ!
Последняя строка пути (для моего примера) должна быть следующей (без разрывов строки):
LDAP://DomainControllerServer/OU=Users,OU=Financial Services,
OU=Financial Site,OU=Contoso,OU=Clients,OU=MyCompany,
DC=MyDomain,DC=LOCAL
DomainControllerServer = IP address in my case.
-- FQDN: MyDomain.LOCAL - Period-separated into DC={part} list
|-- OU: MyCompany
|-- OU: Clients
|-- OU: Contoso
|-- OU: Financial site
|-- OU: Financial Services
|-- OU: Users
Не забудьте экранировать недопустимые символы с обратной косой чертой (\
), например, любой из следующих: + , \ = /
.
Это был кошмар, но, к счастью, теперь это работает.