【问题标题】:DirectorySearcher: How to get only entries for "real" usersDirectorySearcher:如何仅获取“真实”用户的条目
【发布时间】:2018-07-04 16:21:58
【问题描述】:

我使用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]);
        }
    }
}

【问题讨论】:

  • 试试这个过滤器 - (&amp;(objectCategory=person)(objectClass=user)(SAMAccountName=*)(!(homeMDB=*NonUser*)))
  • 刚刚注意到上面的一个错字,使用sAMAccountName而不是SAMAccountName。也可以通过 LDAP 尝试 - (&amp;(objectCategory=person)(objectClass=user)(sAMAccountName=*)(!(cn=*O*)))
  • 我认为它只是CN,它与distinguishedName不同

标签: c# .net active-directory user-accounts directorysearcher


【解决方案1】:

使用 LDAP 在下面尝试

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

仅供参考 - CN 是通用名称。您可以获取有关 LDAP 的更多信息here

你还问我用什么属性可以检索 cn。在这里,您可以通过此代码 sn-p 提取(用于双重检查)。但据我所知,它只是 CN

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

【讨论】:

  • 对不起,不工作。它只删除带有“O”的常用名称;也想要像“托马斯”这样的名字
  • @boboes - 必须有一个域名,对吧?所以你可以通过(&amp;(objectCategory=person)(objectClass=user)(sAMAccountName=*)(mail = *@Yourdomain.com))过滤
  • HealthMailboxfbff1f1a718e4874917d7e39076275bd@writers.local
  • @boboes - 这是输出吗?
  • @boboes:如果您的管理员已将这些邮箱创建为真实用户,则无法区分 AD。我建议尝试使用 Mark Russinovich 创建的 AD Explorer,看看是否可以找到任何可用于区分两种用户类型的属性:docs.microsoft.com/en-us/sysinternals/downloads/adexplorer