2017-06-09 8 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

あなたが指摘するように、彼らはセキュリティの原則ではありませんので、Active Directoryから連絡先情報を照会するSystem.DirectoryServices.AccountManagement名前空間を使用することはできません。あなたは、グループのプロパティを読み込み、グループのDirectoryEntryから直接解析する必要があります。これは、グループのメンバーであるすべてのオブジェクトの識別名のリストになります。どのような種類のオブジェクトであるかを知る方法はありませんので、それぞれを見つけるためにADを照会する必要があります。

投稿した内容でこれを達成するために必要なすべてのコードがあります。memberプロパティをロードリストに追加し、新しいDirectoryEntryオブジェクトをロードしてループします。 objectClassプロパティは、ユーザー、グループ、または連絡先かどうかを通知します。

+0

お世話になりました。私は、DirectoryEntryとサーチャーを使ってグループメンバーを見つけ、それらを新しいエントリーにロードしました。完璧に働いた。 –

+0

@ThorsteinLøkensgard私はうまくいきました。この回答を受け入れてください:) – Ashigore

関連する問題