首页 > 解决方案 > 从 C# 中的 Active Directory 获取用户

问题描述

我试图在ComboBox控件中显示来自网络上 Active Directory 的用户。为此,我有下一个功能:

public static List<Usuario> MostrarUsuariosDominio()
    {
        List<Usuario> rst = new List<Usuario>();

        try
        {

            DirectoryContext dc = new DirectoryContext(DirectoryContextType.Domain, Environment.UserDomainName);
            Domain domain = Domain.GetDomain(dc);
            DirectoryEntry de = domain.GetDirectoryEntry();

            DirectorySearcher adSearcher = new DirectorySearcher(de); 

            adSearcher.Filter = "(&(objectClass=user)(objectCategory=person))";
            adSearcher.PropertiesToLoad.Add("samaccountname");

            SearchResult result;
            SearchResultCollection iResult = adSearcher.FindAll();

            Usuario item;
            if (iResult != null)
            {
                for (int counter = 0; counter < iResult.Count; counter++)
                {
                    result = iResult[counter];
                    if (result.Properties.Contains("samaccountname"))
                    {
                        item = new Usuario();

                        item.Nombre = (String)result.Properties["samaccountname"][0];

                        rst.Add(item);
                    }
                }
            }

            adSearcher.Dispose();
        }

        catch (Exception ex)
        {
            Usuario item = new Usuario();
            item.Nombre = "No se pudo recuperar la lista de usuarios";
            rst.Add(item);
        }

        return rst;
    }

如果我在域控制器的 PC 上运行应用程序,它工作正常:该函数将所有用户返回给我。但如果我在另一台 PC 上运行它,我会遇到异常:

指定的域不存在或无法与其联系

有什么方法可以从另一台 PC 恢复用户列表?

标签: c#active-directoryvisual-studio-2017

解决方案


这一行:

DirectoryContext dc = new DirectoryContext(DirectoryContextType.Domain, Environment.UserDomainName);

告诉它连接到当前用户登录的域。您是否以域用户身份登录?

也许检查什么Environment.UserDomainName等于,看看它是否正确。

如果它是正确的,那么它可能是一个网络问题 - 它无法与域对话。你需要连接到VPN吗?


推荐阅读