2014-01-14 5 views
0

Я хочу создать онлайн-каталог пользователя и извлечь информацию непосредственно из Active Directory. Поэтому после нескольких часов поиска я придумал это решение (что не так уж и много для решения). Когда я запускаю свою программу, все, что она делает, это вращение, как будто оно хочет что-то сделать, но после полного вращения оно дает мне пустую белую страницу.Как получить список пользователей из Active Directory с помощью C#?

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 ============="); 
} 

Пожалуйста, обратите внимание, что я практически ничего о активной директории знаю, только то, что он может быть использовать для хранения Employee информации и создания и управления группами пользователей. Я использовал C# и LDAP для создания страниц входа, для которых требуется и проверяет имя пользователя и пароль из идентификатора, чтобы пройти аутентификацию.

Edited опубликовал приложение требует от пользователя ввести в своей области. После того, как я ввожу доменное имя, он должен указать всех пользователей или что-то в этом роде, он просто вращается и дает мне белую страницу из ничего

+0

Вы контролируете консоль в окне отладки VS тогда? «Щелчок» предполагает, что это какая-то форма. – tofutim

ответ

1

Вместо использования

Console.WriteLine(

попробовать

Response.Write(string.Format(

Это даст вам распечатку, и это должно исправить пустой вопрос страницы.

+0

Это дало мне распечатку! его смешалось, но что-то! –

+0

К сожалению, я пропустил очевидное! – abhi

+0

@ObadiahWilliams Вам нужно будет добавить форматирование HTML, чтобы получить правильный вывод. – abhi

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); 
} 
+0

Я попытался использовать 'ContextType.Domain' раньше, и VS начал жаловаться, говоря, что он не определен. Для чего это? также имейте в виду, что я использую веб-формы. –

+0

Этот код является небольшим вариантом кода, который мы используем в нашем приложении INTRANET ASP .nET. – abhi

Смежные вопросы