如何使用c#.net列出他在winnt文件夹(本地用户和组)或活动目录(域下)中创建的PC用户
本文关键字:用户 活动 PC 创建 域下 net 何使用 文件夹 winnt | 更新日期: 2023-09-27 18:17:19
我实现了一个c# windows应用程序。
对于该应用程序,我想提供windows用户凭据登录。
现在的问题是我需要通过代码从windows pc获取用户列表。
如何获取在winnt文件夹中创建的用户列表(在本地用户和组下)或在active directory域中创建的用户列表。
我有一个从winnt文件夹获取用户列表的想法,它是
DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
// DirectoryEntry admGroup = localMachine.Children.Find("Guests", "group");
// DirectoryEntry admGroup = localMachine.Children.Find("administrators", "group");
DirectoryEntry admGroup = localMachine.Children.Find("users", "group");
//DirectoryEntry admGroup = localMachine.Children.Find("TestUser1", "group");
object members = admGroup.Invoke("members", null);
foreach (object groupMember in (IEnumerable)members)
{
DirectoryEntry member = new DirectoryEntry(groupMember);
listBox1.Items.Add(member.Name);
}
但现在我想列出用户,如果他存在于活动目录或winnt文件夹。
谁能给我代码来交叉验证用户从两个c#代码
对于活动目录部分,如果您使用的是。net 3.5或更新版本,您可以查看新的System.DirectoryServices.AccountManagement
命名空间。
您可以使用PrincipalSearcher
和"按例查询"主体来进行搜索:
// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// define a "query-by-example" principal - here, we search for a UserPrincipal
UserPrincipal qbeUser = new UserPrincipal(ctx);
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
List<string> userNames = new List<string>();
// find all matches
foreach(var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal"
if(!userNames.Contains(found.Name))
{
userNames.Add(found.Name);
}
}
如果你还没有-绝对阅读MSDN文章在。net框架3.5中管理目录安全主体,它很好地展示了如何充分利用System.DirectoryServices.AccountManagement
的新特性
对于本地机器帐户,基本上可以做相同的事情—只是使用不同的PrincipalContext
:
// create your local machine context
PrincipalContext local = new PrincipalContext(ContextType.Machine);
代码的其余部分是相同的—但是您的主体对象实际填充的属性可能要少得多(因为本地机器帐户没有像Active Directory帐户那样为它们存储那么多信息)—但是每个主体肯定至少有一个.Name
属性!