在C#中查询Active Directory

时间:2014-03-17 23:16:11

标签: c# active-directory ldap

我正在尝试对Active Directory执行查询以获取每个用户的所有名字。所以我创建了一个新的控制台应用程序,在我的main方法中有以下代码:

try  
{   
    DirectoryEntry myLdapConnection =new DirectoryEntry("virtual.local");
    myLdapConnection.Path = "LDAP://DC=virtual,DC=local";   

    DirectorySearcher search = new DirectorySearcher(myLdapConnection);  
    search.PropertiesToLoad.Add("cn");   

    SearchResultCollection allUsers = search.FindAll();

我添加了一些代码来检查是否正在建立连接并且可以找到路径。我还确保Collection不是空的。

    //For Debugging
    if(DirectoryEntry.Exists(myLdapConnection.Path())
    {
        Console.WriteLine("Found");
    }
    else Console.WriteLine("Could Not Find LDAP Connection");

    //In my case prints 230
    Console.WriteLine("Total Count: " + allUsers.Count);

    foreach(SearchResult result in allUsers)  
    {  
        //This prints out 0 then 1
        Console.WriteLine("Count: " + result.Properties["cn'].Count);

        if (result.Properties["cn"].Count > 0)  //Skips the first value
        {  
            Console.WriteLine(String.Format("{0,-20} : {1}",  
                result.Properties["cn"][0].ToString()));  //Always fails
        }  
     }    
}  
catch (Exception e)  
{  
    Console.WriteLine("Exception caught:\n\n" + e.ToString());  
}    

我在代码中指定了打印属性的地方,它始终失败。我在这里得到一个System.FormatException,表明Index必须大于零且小于参数列表的大小。

所以最后我不确定“result.Properties”是如何工作的,并且想知道你是否有任何关于如何修复或解决问题的建议。

1 个答案:

答案 0 :(得分:1)

您正在定义两个格式说明符{0}和{1},但只指定一个参数。