.NET Active Directory - 获取特定Active Directory组中的用户列表

时间:2016-01-04 23:29:29

标签: .net winforms active-directory ldap

我有一个使用Ldap查询的组名列表...我已将列表名绑定到WinForms应用程序中的数据网格。当用户选择其中一个组名时,会触发一个事件并将组名传递给下面的方法: -

    // Get a list of group specific users //
    private List<Users> GetUsers(string groupName)
    {
        List<Users> groupSpecificUsers = new List<Users>();
        DirectorySearcher ds = null;
        DirectoryEntry de = new DirectoryEntry(domainPath);
        ds = new DirectorySearcher(de);

        ds.PropertiesToLoad.Add("SAMAccountName");
        ds.PropertiesToLoad.Add("member");
        ds.Filter = "(&(objectClass=group)(SAMAccountName=" + groupName + "))";
        SearchResult sr = ds.FindOne();

        if (sr != null)
        {
                // do whatever you need to do with the entry
        }

.... return list of users that belong to the specific GroupName ....

当我在if语句中放置一个断点时... sr被列为null ...我不明白为什么它的null ...即使选定的组明显有成员...

我觉得,我不太明白在ldap查询中如何使用特定的组名...有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:1)

你有一个DirectoryEntry对象获取domainPath的参数,我认为这是你的代码中的一个字段(?)。如果您可以尝试从根目录进行搜索,则可以尝试使用此代码来查看是否获得了更好的结果:

// Get a list of group specific users //
private List<Users> GetUsers(string groupName)
{
    List<Users> groupSpecificUsers = new List<Users>();
// MAKE SURE THE NEXT LINE REFLECTS YOUR DOMAIN
    DirectorySearcher ds = (new DirectoryEntry("LDAP://dc=yourdomain,dc=tld"));
    ds.PropertiesToLoad.Add("samaccountname");
    ds.PropertiesToLoad.Add("member");
    ds.Filter = "(&(objectClass=group)(SAMAccountName=" + groupName + "))";
    SearchResult sr = ds.FindOne();

    if (sr != null)
    {
            // do whatever you need to do with the entry
    }

查看这些更改是否可以解决您的问题。

答案 1 :(得分:0)

我认为以下一行:

ds.Filter = "(&(objectClass=group)(SAMAccountName=" + groupName + "))";

需要更改为:

ds.Filter = "(&(objectClass=group)(Group=" + groupName + "))";

答案 2 :(得分:0)

这就是我解决它的方式(这几乎是Sam所说的,为了说明的目的我稍微调整了一下): -

            List<Users> groupSpecificUsers = new List<Users>();
            DirectoryEntry ROOT = new DirectoryEntry("LDAP://DC=xxx,DC=net");
            DirectoryEntry de = ROOT;

            var sr = new DirectorySearcher(de);
            sr.PropertiesToLoad.Add("SAMAccountName");
            sr.PropertiesToLoad.Add("member");
            sr.Filter = "(&(objectClass=group)(SAMAccountName=" + groupName + "))";



            if (sr != null)
            {...whatever...}