DirectorySearcher: Как получить только записи для «настоящих» пользователей - PullRequest
0 голосов
/ 04 июля 2018

Я использую DirectorySearcher, чтобы получить всех пользователей из Active Directory, но мне нужно, чтобы только "настоящие" пользователи.

Фильтр:

search.Filter = "(&(objectClass=user)(objectCategory=person))";

но я получаю все учетные записи пользователей, например:

henry.miller            <-wanted
ernest.hemingway        <-wanted
HealthMailboxced7671    <-not wanted 

Вопрос: как мой фильтр нужно изменить, чтобы он возвращал только реальных пользователей?

Весь мой код:

string DomainPath = "LDAP://DC=writers,DC=local";
DirectoryEntry searchRoot = new DirectoryEntry(DomainPath);
DirectorySearcher search = new DirectorySearcher(searchRoot);
search.Filter = "(&(objectClass=user)(objectCategory=person))";
search.PropertiesToLoad.Add("samaccountname");

SearchResult result;

SearchResultCollection resultCol = search.FindAll();

if (resultCol != null)
{
    for (int counter = 0; counter < resultCol.Count; counter++)
    {
        result = resultCol[counter];

        if (result.Properties.Contains("samaccountname"))
        {
            Console.WriteLine((String)result.Properties["samaccountname"][0]);
        }
    }
}

1 Ответ

0 голосов
/ 04 июля 2018

Попробуйте ниже с использованием LDAP

 (&(objectCategory=person)(objectClass=user)(sAMAccountName=*)(!(cn=*O*)))

Только для информации - CN - Common Name. Вы можете получить больше информации о LDAP здесь

Вы также спросили меня, с каким свойством вы можете получить cn. Здесь вы можете извлечь по этому фрагменту кода (для двойной проверки). Но, насколько я знаю, это только CN

 foreach (string property in result.Properties.PropertyNames)
{
      foreach (Object propertyValue in result.Properties[property])
     {
        // print out the Property Value here
      }
}
...