C# 如何确定两个人是否来自active directory中的同一位置
假设active directory设置正确,我正试图找到一种方法来确定两个人是否来自同一位置。我唯一能想到的办法就是找到一种方法来确定他们的目录条目是否位于同一个OU中。所以现在,这就是我现在正在做的事:C# 如何确定两个人是否来自active directory中的同一位置,c#,.net,active-directory,C#,.net,Active Directory,假设active directory设置正确,我正试图找到一种方法来确定两个人是否来自同一位置。我唯一能想到的办法就是找到一种方法来确定他们的目录条目是否位于同一个OU中。所以现在,这就是我现在正在做的事: private bool ComparePeople() { var user1Guid = "aaa"; var user2Guid = "bbb"; var expr = @"CN=.*?,"; var user1OU = Regex.Replace(Ge
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 "";
}
}
}
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);
返回user1OU==user2OU;
}
私有字符串GetUserDN(字符串userGuid)
{
使用(var entry=newdirectoryentry(string.format(“LDAP://”,userGuid)))
{
使用(var search=newdirectorysearcher(条目))
{
search.PropertiesToAdd.Add(“DiscrimitedName”);
var result=search.FindOne().GetDirectoryEntry();
if(result!=null&&result.Properties[“differentizedName”].Count>0)
{
返回result.Properties[“DifferentizedName”].Value.ToString();
}
否则返回“”;
}
}
}
我还没有测试过这个,但我觉得它会起作用。它基本上查找用户的可分辨名称,并给出其Guid。然后,它从DN中删除CN,实质上是查找到该用户的目录条目/OU的路径。然而,这似乎有点复杂。有人有任何意见或建议来简化这一点吗?如果我理解正确,您正在尝试找出两个用户帐户是否位于同一OU(组织单位)内-对吗 我要做的是读取两个用户帐户的父帐户——如果该父帐户匹配,则它们位于同一OU中 如果您使用的是.NET 3.5及更高版本,则应检查
System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。请在此处阅读所有相关内容:
// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find a two users
UserPrincipal user1 = UserPrincipal.FindByIdentity(ctx, IdentityType.Guid, user1Guid);
UserPrincipal user2 = UserPrincipal.FindByIdentity(ctx, IdentityType.Guid, user2Guid);
if(user1 != null && user2 != null)
{
DirectoryEntry dirEntry1 = user1.GetUnderlyingObject() as DirectoryEntry;
DirectoryEntry dirEntry2 = user2.GetUnderlyingObject() as DirectoryEntry;
// if both are OK, get the parents and compare their GUID
if(dirEntry1 != null && dirEntry2 != null)
{
DirectoryEntry parent1 = dirEntry1.Parent;
DirectoryEntry parent2 = dirEntry2.Parent;
bool areInSameOU = (parent1.Guid == parent2.Guid);
}
}
新的S.DS.AM使得在广告中与用户和群组进行互动变得非常容易 如果我没弄错的话,您是在试图找出两个用户帐户是否位于同一个OU(组织单位)内-对吗 我要做的是读取两个用户帐户的父帐户——如果该父帐户匹配,则它们位于同一OU中 如果您使用的是.NET 3.5及更高版本,则应检查
System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。请在此处阅读所有相关内容:
// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find a two users
UserPrincipal user1 = UserPrincipal.FindByIdentity(ctx, IdentityType.Guid, user1Guid);
UserPrincipal user2 = UserPrincipal.FindByIdentity(ctx, IdentityType.Guid, user2Guid);
if(user1 != null && user2 != null)
{
DirectoryEntry dirEntry1 = user1.GetUnderlyingObject() as DirectoryEntry;
DirectoryEntry dirEntry2 = user2.GetUnderlyingObject() as DirectoryEntry;
// if both are OK, get the parents and compare their GUID
if(dirEntry1 != null && dirEntry2 != null)
{
DirectoryEntry parent1 = dirEntry1.Parent;
DirectoryEntry parent2 = dirEntry2.Parent;
bool areInSameOU = (parent1.Guid == parent2.Guid);
}
}
新的S.DS.AM使得在广告中与用户和群组进行互动变得非常容易 啊哈,我不知道父母的财产。所以这里有一个问题。最近,我在AccountManagement命名空间方面运气不好。似乎每件事的处理速度都明显变慢了。这是正常的,还是你认为这是侥幸?不管是哪种方式,看起来我真正需要做的就是拉取目录条目并比较父项?啊哈,我不知道父属性。所以这里有一个问题。最近,我在AccountManagement命名空间方面运气不好。似乎每件事的处理速度都明显变慢了。这是正常的,还是你认为这是侥幸?不管是哪种方式,看起来我真正需要做的就是拉取目录条目并比较父母?