ASP.NET如何列出Windows用户和组?

4
我有一个ASP.NET网站项目,需要列出Windows系统中所有用户及其组。我已将身份模拟设置为true,并在web.config中提供了管理员的用户名和密码。我应该从哪里开始?
谢谢您的帮助。
更新:
目前我有以下代码 -
    var machine = new DirectoryEntry("WinNT://<IP ADDRESS>");
                foreach (DirectoryEntry child in machine.Children)
                {
                   // get the child's group(s).
                }

当我调试时,我可以在machine.Children中看到用户列表。如何找到此用户所属的组(群组)?

你实际上不需要在web.config中设置任何管理员权限,因为我想象中Active Directory中的每个人都应该具有对用户和组的读取访问权限。而且,除非您需要知道哪个用户正在查看您的页面,否则您实际上不需要身份模拟。 - Matt Wilko
2个回答

2
本文介绍如何与Active Directory通信,帮助您达到目标: http://www.codeproject.com/KB/system/everythingInAD.aspx 要获取用户,您可以按照以下步骤进行:
public List<string> GetUserList()
{
        string DomainName="";
        string ADUsername="";
        string ADPassword="";

        List<string> list=new List<string>();
        DirectoryEntry entry=new DirectoryEntry(LDAPConnectionString, ADUsername, ADPassword);
        DirectorySearcher dSearch=new DirectorySearcher(entry);
        dSearch.Filter="(&(objectClass=user))";

        foreach(SearchResult sResultSet in dSearch.FindAll())
        {
            string str=GetProperty(sResultSet, "userPrincipalName");
            if(str!="")
                list.Add(str);
        }
        return list;
}

谢谢,看起来我需要在Windows机器上设置LDAP服务器。有没有办法在不设置LDAP的情况下获取列表? - tempid

2
您可能想从 .net 中的 DirectoryEntry 和 Active Directory 支持开始学习。这里有一个很好的资源:http://www.codeproject.com/KB/system/everythingInAD.aspx
即使您不在域中,本地访问也是类似的:
DirectoryEntry localMachine = new DirectoryEntry("WinNT://" +
               Environment.MachineName);
DirectoryEntry admGroup = localMachine.Children.Find("administrators",
               "group");
object members = admGroup.Invoke("members", null);
foreach (object groupMember in (IEnumerable)members) {
  DirectoryEntry member = new DirectoryEntry(groupMember);
  //...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接