2012-05-06 40 views
1

假設活動目錄設置正確,我試圖找到一種方法來確定兩個人是否來自同一位置。我能夠繞過它的唯一方法是找到一種方法來確定他們的目錄條目是否位於同一個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的路徑。然而,這似乎有點複雜。有沒有人有任何意見或建議來簡化這個?

回答

1

如果我正確理解你,你試圖找出兩個用戶帳戶是否位於同一個OU(組織單位)內 - 對嗎?

我會做的是讀取父母這兩個用戶帳戶 - 如果該父母匹配,則他們在同一個OU。

如果您使用的是.NET 3.5及更高版本,則應檢查System.DirectoryServices.AccountManagement(S.DS.AM)命名空間。在這裏閱讀全部內容:

基本上,你可以定義域範圍內,並可以輕鬆地查找用戶和/或組AD:

// 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可以很容易地與AD中的用戶和羣組玩耍!

+0

啊哈,我不知道父母的財產。所以這是一個問題。在最近的過程中,我與AccountManagement命名空間運氣不佳。似乎所有事情都得到了明顯緩慢的處理。這是正常的,還是你認爲這是一種僥倖?無論哪種方式,看來我真的需要做的就是拉出目錄條目並比較父母嗎? – Sinaesthetic

相關問題