加载活动目录用户及其关联的计算机

时间:2014-06-30 04:01:17

标签: c# active-directory

Hello Everyone我正在尝试开发一个程序,它将列出所有Active Directory用户,当我选择一个用户时,程序应该能够显示与该用户关联的计算机。即该AD用户可访问的计算机。 我编写了代码列出所有用户,但不知道如何列出与该用户关联的计算机。 以下是将AD用户加载到数据表中的代码:

DataTable dtUser= new DataTable();
    try
    {            
        DirectoryEntry dom = Domain.GetComputerDomain().GetDirectoryEntry();

        DirectorySearcher dsAllUsers = new DirectorySearcher(dom);
        dsAllUsers.SearchScope = SearchScope.Subtree;
        dsAllUsers.Filter = "(objectCategory=Person)";

        SearchResultCollection result = dsAllUsers.FindAll();
        dtUser.Columns.Add("CustodianName");
        dtUser.Columns.Add("Email");
        dtUser.Columns.Add("Title");
        dtUser.Columns.Add("Dept.");           

        foreach (SearchResult rs in result)
        {
            DataRow newRow = dtUser.NewRow();

            if (rs.GetDirectoryEntry().Properties["samaccountname"].Value != null)
                newRow["CustodianName"] = rs.GetDirectoryEntry().Properties["samaccountname"].Value.ToString();

            if (rs.GetDirectoryEntry().Properties["mail"].Value != null)
                newRow["Email"] = rs.GetDirectoryEntry().Properties["mail"].Value.ToString();

            if (rs.GetDirectoryEntry().Properties["title"].Value != null)
                    newRow["Title"] = rs.GetDirectoryEntry().Properties["title"].Value.ToString();

            if (rs.GetDirectoryEntry().Properties["department"].Value != null)
                newRow["Dept."] = rs.GetDirectoryEntry().Properties["department"].Value.ToString();

            dtUser.Rows.Add(newRow);
        }
        return dtUser;
    }
    catch (Exception)
    {
        throw;
    }

1 个答案:

答案 0 :(得分:0)

我不相信标准的LDAP / Active Directory有这样的东西。

计算机只是另一类AD对象 - 但是没有"链接"在用户和一台(或多台)计算机之间 - belongsTo类没有computer属性,computers上也没有User集合}。

如果您的组织已实施默认AD架构的扩展(这完全可能!),那么它是一个自定义解决方案,然后必须知道它是什么! : - )