【问题标题】:Is there a way to tell if an account belongs in a certain OU?有没有办法判断一个帐户是否属于某个 OU?
【发布时间】:2018-09-10 13:45:42
【问题描述】:

我可以检查一个帐户是否是 AD 组中的成员,但有没有办法判断一个帐户是否属于某个 OU?我想按 OU 而不是 AD 组搜索,但我不确定这是否可能。下面是我搜索广告组的方法。

string myADSPath="LDAP://onecity/CN=Users,DC=onecity,DC=corp,DC=fabrikam,DC=com";  


if (DirectoryEntry.Exists(myADSPath))  
{  
    Console.WriteLine("In the group");  
}  
    else  
{  
    Console.WriteLine("Couldn't get in the group");  
}  

【问题讨论】:

  • 这不只是基于专有名称的后缀搜索吗? (除非我误解了您的意思是“属于 OU”)
  • @Damien_The_Unbeliever 在搜索 AD 组时,我可以使用 DirectoryEntry(member) 直接搜索成员,但对于包含组和帐户的 OU,我不确定是否有办法进行类似搜索.
  • 基本上我要问的是如果我有一个用户帐户,有没有办法告诉它属于哪个OU。@Damien_The_Unbeliever
  • 您要检查用户是否在指定的 OU 中?或者你想找到一个用户并获取用户OU?
  • 我可以获取用户,我只是想检查他们是否在特定的 OU 中。 @Tor

标签: c# .net active-directory ldap


【解决方案1】:

通过这个方法,可以检查指定用户是否在foo/barOU中:

public bool CheckUserInOU(string userName)
{
    using (var entryPoint = new DirectoryEntry($@"LDAP://onecity/OU=bar,OU=foo,DC=onecity,DC=corp,DC=fabrikam,DC=com"))
    {
        // User and pass for the LDAP query user if needed.
        entryPoint.Username = "YourUsernameHere";
        entryPoint.Password = "YourPasswordHere";

        using (var searcher = new DirectorySearcher(entryPoint))
        {
            searcher.SearchScope = SearchScope.OneLevel;
            searcher.Filter = $"(&(samAccountName={userName})(objectCategory=user))";

            return searcher.FindOne() != null;
        }
    }
}

正如@Damien_The_Unbeliever 所说,如果你有用户,distinguishedName 属性将包含 OU。

【讨论】:

  • 感谢您的帮助,但我还有一个问题。我提出的 LADP 只是微软提供的一个示例,我不确定当我只有 OU 时我的 LADP 查询会是什么。是否有任何 powerhsell 命令或可以返回 OU 的完整路径的东西?如果您不知道,我对此很陌生,如果您能得到任何帮助,我将不胜感激。
  • 你需要完整的路径,你必须知道 DC 和完整的 OU 路径。例如,您可以创建一个Foo OU,并在其中嵌套一个同名的Foo OU。您可以搜索Foo OU,但您将有 2 个匹配项。
  • 但是,如果您是 LDAP/AD 的新手,您应该阅读该主题的一些内容。例如this.
  • 我想我有 DC,但我不确定在提供的示例中我会用什么代替“onecity”。如果我的 OU 路径是“domainExample.net/Accounts/Users/Common Accounts”,我的 LADP 将是 ($@"LADP://domainExample/OU=Accounts, OU=users, OU=Common Accounts, DC=domainExample, DC =网”)
  • 一个城市是服务器:端口