我正在使用ETL将AD用户存储在本地SQL Server数据库中。以下AD查找代码填充属于特定组的所有AD用户的Guid,FirstName和LastName:
var adPrincipalContext = new PrincipalContext(ContextType.Domain, domainName);
var group = GroupPrincipal.FindByIdentity(adPrincipalContext, groupName);
var members = group.GetMembers();
var groupUsers = new List<Tuple<Guid, string, string>>();
var enumerator = members.GetEnumerator();
while (enumerator.MoveNext())
{
var user = enumerator.Current as UserPrincipal;
groupUsers.Add(new Tuple <Guid, string, string>(
(Guid)user.Guid, user.GivenName, user.Surname));
}
问题是,对于这些用户中的大约一半,上面填充到groupUsers列表中的用户guid与用户DisplayName直接AD查询返回的guid不同,如下所示:
using (var context = new PrincipalContext(ContextType.Domain, domainName))
{
// init vars
var up = new UserPrincipal(context);
var ps = new PrincipalSearcher(up);
var allUsers = ps.FindAll().ToList();
var user2 = allUsers.Where(x =>
x.DisplayName == groupUser.Item3 + ", " + groupUser.Item2).FirstOrDefault();
}
知道问题可能是什么?我需要根据AD用户的Guid的db查找返回每个用户的数据库表示。
知道可能导致这种差异的原因吗?
答案 0 :(得分:0)
显示名称不必是唯一的。您可能有多个具有相同显示名称的帐户。
对于快速测试,您可以修改第二个代码块,以便在找到多个帐户时抛出异常。如果您遇到异常,那么您就知道问题所在:
std::getline()