在Active Directory组中查找用户的语法

时间:2016-09-26 18:53:47

标签: active-directory active-directory-group

我正在尝试检查用户的Active Directory组。我正在使用我知道的测试用户,而我正在努力使语法正确。

我正在搜索整个域名,而我正在使用的过滤器就是:

(&(objectCategory=user)(CN=windowslogin)(memberof=CN=/#ITTest,OU=Security,OU=Groups,OU=FIRM,DC=our,DC=place,DC=com))

我认为这对组成部分感到窒息,因为如果我删除整个memberof子句,只搜索整个AD,它就会找到用户。当我尝试添加一个子句来搜索特定的组时,它只会找不到它们。

我尝试过的其他事情:

  • 列出项目&没有#
  • 之前的转义字符
  • 只有组OU和组名后的DC
  • 将OU添加到查询的用户名部分
  • 大喊大叫

到目前为止没有运气。

我正在使用专门的工具来执行查询,但我希望它使用的语法足够接近常规命令行,以致有人可能指出我的错误。我也是Active Directory的完全新手,因此可能会出现多个错误。

我意识到这个问题很模糊,但如果有人能提供任何见解,我真的很感激。

2 个答案:

答案 0 :(得分:0)

您应该查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。

基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:

// set up domain context - without further parameters, it defaults to the current
// domain you're logged in to, and to the whole AD tree
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
    // find the group
    GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupName") as GroupPrincipal;

    if(group != null)
    {
        // get the group members
        PrincipalSearchResult<Principal> members = group.GetMembers();

        // now you just need to find the user you're looking for
        UserPrincipal user = members.ToList().OfType<UserPrincipal>().FirstOrDefault(u => u.DistinguishedName == "CN=YourUserName");

        if (user != null)
        {
            // do something with user
        }
    }
}

新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!

在这里阅读更多相关信息:

答案 1 :(得分:0)

看来,您正在寻找以下过滤器:

(memberof:1.2.840.113556.1.4.1941:=CN=\#ITTest,OU=Security,OU=Groups,OU=FIRM,DC=our,DC=place,DC=com)

(用反斜杠代替斜线)

请参阅Search Filter Syntax

这将显示#ITTest组和所有嵌套组的所有成员。然而,这种方法有一些缺点,例如。 G。在企业环境中,它可能会导致一些性能问题

如果您不需要嵌套组搜索,您仍然可以使用memberOf:就像您提供的示例一样