假设活动目录设置正确,我试图找到一种方法来确定两个人是否来自同一位置。我能够解决这个问题的唯一方法是找到一种方法来确定他们的目录条目是否位于同一个 OU 中。所以目前,这就是我目前正在吐槽的内容:
private bool ComparePeople()
{
var user1Guid = "aaa";
var user2Guid = "bbb";
var expr = @"CN=.*?,";
var user1OU = Regex.Replace(GetUserDN(user1Guid), expr, string.Empty);
var user2OU = Regex.Replace(GetUserDN(user2Guid), expr, string.Empty);
return user1OU == user2OU;
}
private string GetUserDN(string userGuid)
{
using(var entry = new DirectoryEntry(string.format("LDAP://<GUID={0}>", userGuid)))
{
using(var search = new DirectorySearcher(entry))
{
search.PropertiesToAdd.Add("distinguishedName");
var result = search.FindOne().GetDirectoryEntry();
if(result != null && result.Properties["distinguishedName"].Count > 0)
{
return result.Properties["distinguishedName"].Value.ToString();
}
else return "";
}
}
}
我还没有测试过这个,但我觉得它会工作。它基本上找到用户的可分辨名称,给出他们的 Guid。然后它从 DN 中删除 CN,本质上是找到该用户的目录条目/OU 的路径。不过,好像有点绕。有没有人有任何意见或建议来简化这一点?