【问题标题】:Syntax for finding a user in an Active Directory group在 Active Directory 组中查找用户的语法
【发布时间】:2016-09-26 18:53:47
【问题描述】:

我正在尝试检查用户的 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 的新手,所以可能不止一个问题。

我知道这个问题很模糊,但如果有人可以提供任何见解,我将非常感激。

【问题讨论】:

    标签: active-directory active-directory-group


    【解决方案1】:

    您应该查看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 中与用户和组一起玩变得非常容易!

    在此处了解更多信息:

    【讨论】:

    • 感谢您的快速回答,但我不认为这对我有帮助。就像我说的,我对 AD 很陌生。听起来你是在建议我们在系统中添加一些东西,但我无法做出这样的改变。我也不确定它是否与我们使用的集成工具兼容。至少我从未见过任何与您在此处所做的相似的模板或示例。
    • @VandaPaladino:不,不需要添加任何东西 - 只需使用它!
    • 再次感谢。我正在使用集成工具,而不是自己写东西,所以我认为我不能引入新的命名空间。我想我一直试图让它以复杂的方式工作。
    【解决方案2】:

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

    (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: 就像您提供的示例一样

    【讨论】:

    • 感谢该链接很有帮助。错误原来是在屏幕的不同部分。有一个用于搜索 DN 的框和一个用于过滤器的框,至少我的一个过滤器版本是正确的,但是 DN 框有 CN=Users,DC=our,DC=place,DC=com 并且我们必须取出 CN=Users。仍然不完全确定原因,但它现在可以正常工作,至少可以添加到组中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多