2017-06-09 113 views
0

我一直在四處搜索有關在Active Directory中從一個組中獲取用戶和聯繫人的解決方案,但找不到它。從Active Directory中的組獲取​​所有用戶和聯繫人

我知道我不能以與用戶相同的方式獲取聯繫人,因爲他們不是安全主管?

我使用此代碼來獲取我的羣組中的所有用戶,是否可以將此擴展爲檢索聯繫人的姓名和手機號碼?還是我需要寫點新東西?

  var context = new PrincipalContext(ContextType.Domain, "MY_DOMAIN"); 
      using (var searcher = new PrincipalSearcher()) 
      { 
       var groupName = "MY_GROUP"; 
       var sp = new GroupPrincipal(context, groupName); 
       searcher.QueryFilter = sp; 
       var group = searcher.FindOne() as GroupPrincipal; 

       if (group == null) 
        Console.WriteLine("Invalid Group Name: {0}", groupName); 

       foreach (var f in group.GetMembers()) 
       { 
        var principal = f as UserPrincipal; 

        if (principal == null || string.IsNullOrEmpty(principal.Name)) 
         continue; 

        DirectoryEntry entry = (principal.GetUnderlyingObject() as DirectoryEntry); 
        DirectorySearcher entrySearch = new DirectorySearcher(entry); 
        entrySearch.PropertiesToLoad.Add("mobile"); 
        entrySearch.PropertiesToLoad.Add("sAMAccountName"); 
        entrySearch.PropertiesToLoad.Add("name"); 
        SearchResultCollection results = entrySearch.FindAll(); 

        ResultPropertyCollection rpc = results[0].Properties; 
        foreach (string rp in rpc.PropertyNames) 
        { 
         if (rp == "mobile") 
          Console.WriteLine(rpc["mobile"][0].ToString()); 

         if(rp == "sAMAccountName") 
          Console.WriteLine(rpc["sAMAccountName"][0].ToString()); 
        } 

回答

1

您不能使用System.DirectoryServices.AccountManagement命名空間來從Active Directory查詢聯繫人信息,因爲正如你指出,他們不是安全的原則。您需要直接從組的DirectoryEntry中讀取並解析該組的member屬性。這將是所有屬於該組成員的對象的可分辨名稱列表。沒有辦法從中瞭解它們是什麼類型的對象,因此您需要查詢AD以找出每個對象。

您已完成所需的所有代碼,只需將member屬性添加到加載列表中,然後循環加載新的DirectoryEntry對象即可。 objectClass屬性會告訴你它是用戶,組還是聯繫人。

+0

嘿,謝謝。我使用DirectoryEntry和搜索器來查找組成員,然後將它們加載到新條目中。工作完美。 –

+0

@ThorsteinLøkensgard我很高興它解決了。請接受這個答案:) – Ashigore

相關問題