gpt4 book ai didi

c# - 从 DN 获取用户信息

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:27 30 4
gpt4 key购买 nike

我用下面的代码有两个目标

1) 获取属于特定广告组的用户列表
2) 获取属于该组的所有用户的电子邮件/姓氏/名字

如果有更好的方法来实现这两个目标,请告诉我。

我能够获得完整的 DN,但我不确定如何从完整的 DN 中获取剩余数据,或者如果有更好的方法来提取此信息,请告诉我。下面是我正在使用的代码,但出现错误:

The value provided for adsObject does not implement IADs.

当我尝试使用完整 DN 执行 DirectorySearcher 时。

HashSet<string> User_Collection = new HashSet<string>();

SearchResultCollection sResults = null;
DirectoryEntry dEntryhighlevel = new DirectoryEntry("LDAP://CN=Global_Users,OU=Astrix,OU=Clients,OU=Channel,DC=astro,DC=net");
foreach (object dn in dEntryhighlevel.Properties["member"])
{
DirectoryEntry dEntry = new DirectoryEntry(dn);
Console.WriteLine(dn);
DirectorySearcher dSearcher = new DirectorySearcher(dEntry);
//filter just user objects
dSearcher.SearchScope = SearchScope.Base;
//dSearcher.Filter = "(&(objectClass=user)(dn="+dn+")";
dSearcher.PageSize = 1000;
sResults = dSearcher.FindAll();
foreach (SearchResult sResult in sResults)
{
string Last_Name = sResult.Properties["sn"][0].ToString();
string First_Name = sResult.Properties["givenname"][0].ToString();
string Email_Address = sResult.Properties["mail"][0].ToString();
User_Collection.Add(Last_Name + "|" + First_Name + "|" + Email_Address);
}

速度很重要,是的,我知道我没有按照设计的那样使用 HashSet。

最佳答案

我总是使用 System.DirectoryServices.AccountManagement .

您首先会看到的内容之一是:“通过使用可用的快速并发绑定(bind) (FSB) 功能提高了连接速度。连接缓存减少了使用的端口数量。”话虽这么说,我没有针对此测试您的代码以提高速度,您必须自己做,但这是 Microsoft 的新库。

这是我的代码示例:

// Create the context for the principal object. 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain,
"fabrikam",
"DC=fabrikam,DC=com");

// Create an in-memory user object to use as the query example.
GroupPrincipal u = new GroupPrincipal(ctx) {DisplayName = "Your Group Name Here"};

// Set properties on the user principal object.

// Create a PrincipalSearcher object to perform the search.
PrincipalSearcher ps = new PrincipalSearcher {QueryFilter = u};

// Tell the PrincipalSearcher what to search for.

// Run the query. The query locates users
// that match the supplied user principal object.
PrincipalSearchResult<Principal> results = ps.FindAll();

foreach (UserPrincipal principal in ((GroupPrincipal)results.FirstOrDefault()).Members)
{
string email = principal.EmailAddress;
string name = principal.Name;
string surname = principal.Surname;
}

关于c# - 从 DN 获取用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055102/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com