gpt4 book ai didi

c# - 使用电子邮件 ID 从 Active Directory 中查找用户名

转载 作者:太空狗 更新时间:2023-10-30 00:23:27 26 4
gpt4 key购买 nike

我通过传递电子邮件 ID 从 Active Directory 中查找用户名。它工作正常。但是获取用户名需要 30-40 秒。还有其他更好的方法可以通过电子邮件地址从 Active Directory 中查找用户名吗?

请引用我的代码:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "domainname"))
{
UserPrincipal userPrincipal = new UserPrincipal(context);
PrincipalSearcher principalSearch = new PrincipalSearcher(userPrincipal);

foreach (UserPrincipal result in principalSearch.FindAll())
{
if (result != null && result.EmailAddress != null && result.EmailAddress.Equals(user.Email, StringComparison.OrdinalIgnoreCase))
{
user.FirstName = result.GivenName;
user.LastName = result.Surname;
}
}
}

最佳答案

您无需枚举所有 用户即可找到其中一个!试试这个代码:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "domainname"))
{
UserPrincipal yourUser = UserPrincipal.FindByIdentity(context, EmailAddress);

if (yourUser != null)
{
user.FirstName = yourUser.GivenName;
user.LastName = yourUser.Surname;
}
}

如果这不起作用,或者如果您需要一次搜索多个条件,请使用 PrincipalSearcher 和 QBE(按示例查询)方法 - 搜索 您需要的一个用户 - 不要循环遍历所有用户!

// create your domain context
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "domainname"))
{
// define a "query-by-example" principal -
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.EmailAddress = yourEmailAddress;

// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

// find all matches
foreach(var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal" - it could be user, group, computer.....
}
}

关于c# - 使用电子邮件 ID 从 Active Directory 中查找用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38801217/

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