2016-10-28 9 views
-1

戻ってきたmarc_sさんに感謝します。DLのメンバーをLDAPで取得するC#

私は次のコードを試してみました:、ここで

public void GetInfo() 
{ 
    try 
    { 
     //Object obj; 
     DirectorySearcher search; 
     DirectoryEntry entry; 
     SearchResult result; 
     String mailid = ""; 
     bool flag = false; 

     entry = new DirectoryEntry(LDAPpath);//, Domainwithuser, password); 

     search = new DirectorySearcher(entry); 
     search.Filter = "CN=DistributionList1"; 

     int i = search.Filter.Length; 

     string str = "", str1 = ""; 

     foreach (SearchResult AdObj in search.FindAll()) 
     { 
      foreach (String objName in AdObj.GetDirectoryEntry().Properties["member"]) 
      { 
       str += Convert.ToString(objName) + "<Br>"; 
       int selIndex = objName.IndexOf("CN=") + 3; 
       int selEnd = objName.IndexOf(",OU") - 3; 
       str1 += objName.Substring(selIndex, selEnd).Replace("\\", "") + "<BR>"; 

       DirectorySearcher dsSearch = new DirectorySearcher(entry); 
       dsSearch.Filter = "CN=" + objName.Substring(selIndex, selEnd).Replace("\\", ""); 

       foreach (SearchResult rs in dsSearch.FindAll()) 
       { 
        str1 += "&lt;p align='right'><font face='calibri' color='#2266aa' size=2>" + Convert.ToString(rs.GetDirectoryEntry().Properties["mail"].Value) + "|" + Convert.ToString(rs.GetDirectoryEntry().Properties["displayName"].Value) + "|" + Convert.ToString(rs.GetDirectoryEntry().Properties["sAMAccountName"].Value) + "|" + Convert.ToString(rs.GetDirectoryEntry().Properties["department"].Value) + "|" + Convert.ToString(rs.GetDirectoryEntry().Properties["memberOf"].Value) + "&lt;/font></p>"; 
       } 
      } 
     } 

     Response.Write("&lt;BR>" + str + "&lt;Br>" + str1 + "&lt;BR>"); 
    } 
    catch (Exception ex) 
    { 
     Response.Write("--unable to fetch--<BR>" + ex.Message); 
    } 
} 

search.findAllは、私はすべての電子メールアドレスを取得するための要件を持っている構文

に無効なDN

を言ってDirectoryCOMExceptionをスローします配布リストに属しています。

私は下のリンクでアウトに詳細なアプローチを実装してみましたが、残念ながらそれはうまくいきませんでした: https://forums.asp.net/t/1224607.aspx?Displaying+Members+in+a+Distribution+List

すべてのヘルプは大歓迎です。

ありがとうございました。

+1

あなたは何を試しましたか?どこで止まっていますか?私たちは**助けます** ** - あなたのためのコード全体を書くだけではありません... –

+0

こんにちはmarc_s、私は元の投稿を更新しました。 –

答えて

0

System.DirectoryServices.AccountManagement(S.DS.AM)名前空間をチェックアウトする必要があります。これはDirectorySearcher古い、むしろ不格好よりもあなたの人生は全体の多く容易になります...

基本的に、あなたはドメインコンテキストを定義し、簡単にADのユーザーおよび/またはグループを見つけることができます:

// set up domain context - limit to the OU you're interested in 
// use this constructor if you want just the default domain, and search in the whole domain 
//  using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, null)) 
// or use this line here to define a *container* to search inside of 
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, null, "OU=YourOU,DC=YourCompany,DC=Com")) 
{ 
    // find the group in question - this can be either a DL, or a security group - both should be found just fine 
    GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere"); 

    // if found.... 
    if (group != null) 
    { 
     // iterate over members 
     foreach (Principal p in group.GetMembers()) 
     { 
      Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName); 
      // do whatever you need to do to those members 
     } 
    } 
} 

新しいS.DS.AMにより、ADのユーザーやグループと一緒に遊ぶのが本当に簡単になります!

ここでそれについて詳しく読む:

をも:私は強く、別を表示するデータのとをフェッチを保ち、明確かつ厳密をお勧めします - ドンHTML表現との混在を避ける - 巨大な "泥のボール"スタイルコード - がおすすめです!

1つの方法は、必要なデータを取得します。 List<UserPrincipal>(または、独自のクラスを定義して必要なデータを保持することもできます)、次にの2番目のという別のメソッドを使用して、最初のメソッドからこの情報を取得し、それを反復表示します。

+0

ありがとうございました。これを試して、それがうまくいくかどうかを知らせます。ありがとうございました:) –

+0

GroupPricipal.FindByIdentityメソッドの実行時にInnerException = ""サーバーから照会が返されました "とのS.DS.AM.PrincipalOperationExceptionが発生しました。 –

+0

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain、null、 "OU =エンドユーザー、OU =アカウント、DC = nos、DC = 、DC = 、DC = com")) {GroupPrincipal group = GroupPrincipal。FindByIdentity(ctx、 ""); foreach(group.GetMembers()のプリンシパルp) { Console.WriteLine( "{0}:{1}"、p.StructuralObjectClass、p.DisplayName); } } –

関連する問題