如何在asp.net c#web表单应用程序中的Active Directory OU中创建所有电子邮件地址的arraylist?

时间:2015-09-11 19:24:29

标签: c# asp.net

我已阅读了几篇帖子,但我无法为我工作。我想在“标准用户”OU中创建所有显示名称的arraylist。然后我将使用该arraylist填充下拉列表。我在另一个线程中找到了以下内容,但它在指定的OU中提供了组而不是用户:

public ArrayList Groups()
{
    ArrayList groups = new ArrayList();
    foreach (System.Security.Principal.IdentityReference group in
        System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups)
    {
        groups.Add(group.Translate(typeof
            (System.Security.Principal.NTAccount)).ToString());
    }

    return groups;
}

是否可以修改此标准用户OU中的用户列表?或者我应该使用不同的方法吗?

我也发现了这个,但是我收到一个错误('std_users'下的红线)表示'并非所有代码路径都返回一个值'。

public ArrayList std_users()
{
    // List of strings for your names
    List<string> allUsers = new List<string>();

    // create your domain context and define the OU container to search in
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "myco.org", "OU=Standard Users, dc=myco, dc=org");

    // define a "query-by-example" principal - here, we search for a UserPrincipal (user)
    UserPrincipal qbeUser = new UserPrincipal(ctx);

    // create your principal searcher passing in the QBE principal    
    PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

    // find all matches
    foreach (var found in srch.FindAll())
    {
        // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
        allUsers.Add(found.DisplayName);
    }
}

非常感谢任何帮助。

我正在使用c#,Visual Studio 2013,框架是4.5.1。

2 个答案:

答案 0 :(得分:1)

首先关闭:停止使用 ArrayList - 该类型自.NET 2.0以来不应使用 - 使用List<string>(或更一般地说:List<T>) - 更好的性能和可用性!

您可以使用PrincipalSearcher和&#34;按示例查询&#34;负责你的搜索:

public List<string> GetAllEmailsFromUsersContainer()
{
    List<string> users = new List<string>();

    // create your domain context and bind to the standard CN=Users
    // container to get all "standard" users
    using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, null, "CN=Users,dc=YourCompany,dc=com"))
    {
        // define a "query-by-example" principal - here, we search for a UserPrincipal 
        // which is not locked out, and has an e-mail address   
        UserPrincipal qbeUser = new UserPrincipal(ctx);
        qbeUser.IsAccountLockedOut = false;
        qbeUser.EmailAddress = "*";

        // create your principal searcher passing in the QBE principal    
        PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

        // find all matches
        foreach(var found in srch.FindAll())
        {
            users.Add(found.EmailAddress);
        }
    }

    return users;
}

答案 1 :(得分:-1)

return allUsers;添加到std_users(),并告诉我们这是否适合您。