如何使用C#从Active Directory检索用户列表?

时间:2014-01-14 22:00:44

标签: c# asp.net active-directory

我想创建一个在线用户目录,并直接从Active Directory中提取信息。因此,经过几个小时的搜索,我想出了这个解决方案(这不是一个很好的解决方案)。当我运行我的程序时,它所做的就是旋转,就像它想做某事一样但是在完成所有旋转后它给了我一个空白的白页。

protected void btnClick_Click1(object sender, EventArgs e)
{
    string dom = txtDomainName.Text;

    System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry("LDAP://" + dom);
    System.DirectoryServices.DirectorySearcher mySearcher = new System.DirectoryServices.DirectorySearcher(entry);
    mySearcher.Filter = ("(objectClass=user)");
    Console.WriteLine("Listing of users in the Active Directory");
    Console.WriteLine("========================================");


    foreach (System.DirectoryServices.SearchResult resEnt in mySearcher.FindAll())
    {
        try
        {
            System.DirectoryServices.DirectoryEntry de = resEnt.GetDirectoryEntry();
            Console.WriteLine("Display Name  : " + de.Properties["DisplayName"].Value.ToString());
            Console.WriteLine("Email         : " + de.Properties["Mail"].Value.ToString());
            Console.WriteLine("Title         : " + de.Properties["Title"].Value.ToString());
            Console.WriteLine("User Name     : " + de.Properties["sAMAccountName"].Value.ToString());
            Console.WriteLine("First Name    : " + de.Properties["GivenName"].Value.ToString());
            Console.WriteLine("Last Name     : " + de.Properties["sn"].Value.ToString());
            Console.WriteLine("Initials      : " + de.Properties["Initials"].Value.ToString());
            Console.WriteLine("Company       : " + de.Properties["Company"].Value.ToString());
            Console.WriteLine("Department    : " + de.Properties["Department"].Value.ToString());
            Console.WriteLine("Telephone No. : " + de.Properties["TelephoneNumber"].Value.ToString());
        }
        catch (Exception ex)
        {
        }
        Console.WriteLine("===========    End of user   =============");

    }
    Console.WriteLine("===========    End of Listing   =============");
}

请注意,我对活动目录几乎一无所知,只是它可用于存储员工信息以及创建和管理用户组。我使用C#和LDAP创建登录页面,要求并验证ID中的用户名和密码以通过身份验证。

被修改 的 发布的应用程序要求用户放入其域。在我输入域名后,它应该列出所有用户或者其他东西,它只是旋转并给我一个白页无任何东西

2 个答案:

答案 0 :(得分:1)

而不是使用

Console.WriteLine(

Response.Write(string.Format(

这将为您提供打印输出,这应该可以解决您的空白页问题。

答案 1 :(得分:0)

我在基于控制台的应用程序中对此进行了测试。我使用Directory.Services.AccountManagement类来实现这一点。在我的例子中,我只是列出名称。

private static string SearchUsers(UserPrincipal parUserPrincipal)
{

    PrincipalSearcher insPrincipalSearcher = new PrincipalSearcher {QueryFilter = parUserPrincipal};

    PrincipalSearchResult<Principal> results = insPrincipalSearcher.FindAll();
    var builder = new StringBuilder();
    foreach (UserPrincipal p in results)
    {
        builder.AppendFormat("SamAccountName:{0}\t DisplayName:{1}\tUserPrincipal:{2}\tDescription:{3}\tEmail:{4}\tTel:{5}\n", p.SamAccountName, p.DisplayName, p.UserPrincipalName, p.Description, p.EmailAddress, p.VoiceTelephoneNumber);
    }
    return builder.ToString();
}


public static string SetPrincipal()
{
    // **Make sure you set the correct domain name** 
    var pc = new PrincipalContext(ContextType.Domain, "myCompany");
    UserPrincipal insUserPrincipal = new UserPrincipal(pc) {Name = "*"};
    return SearchUsers(insUserPrincipal);
}
相关问题