2011-03-09 15 views
6

System.DirectoryServices.AccountManagement名前空間の一部であるGroupPrincipalを使用して文字列型のリストを作成しようとしているため、ユーザーがActive Directoryグループのメンバであるかどうかを確認できます。これまで編集したクラスは次のとおりです。Active DirectoryユーザーグループのメンバシップGroupPrincipal

public class ActiveDirectoryMembership 
{ 
    private PrincipalContext context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName); 
    private List<string> GroupName {get;set;} 

    public ActiveDirectoryMembership() 
    { 
     //Code snipped - this part returns a list of users 
     populateGroups(); 
    } 

    private void populateGroups() 
    { 
     GroupPrincipal SearchGroup = GroupPrincipal.FindByIdentity(context, "Group Name"); 
     GroupName = new List<string>(); 
     foreach (UserPrincipal p in GroupName.GetMembers()) 
     { 
      GroupName.add(p.SamAccountName); 
     } 
    } 

どこが間違っていますか?事前に

感謝:)

+2

あなたは何を参照してください、あなたは**を見るために何を期待していますか? ?? –

+1

Mattこれは本当の質問ではありません。このコードはどのように機能しますか?どの結果が得られますか?ブレークポイントでチェックすると、デバッグ時にどのように動作しますか?あなたは今何を得ているものとは違って何をしたいですか? –

+1

申し訳ありませんが、私はユーザーのリストを取得していません。 GroupNameの値はnullです。私はユーザーのリストを見ることを期待しています(私はそのグループのメンバーであるユーザーがいることを知っています) - 意味がありますか? – Matt

答えて

0

私はあなたがあなたの方法では、単純なタイプミスがあると思う - あなたはSearchGroupにグループプリンシパルを取得している(ところで、NULLをチェック!!)、その後、あなたはつかんでいますメンバーはオフGroupName ??

これを試してみてください:

private void populateGroups() 
{ 
    GroupPrincipal SearchGroup = GroupPrincipal.FindByIdentity(context, "Group Name"); 

    if(SearchGroup != null) 
    { 
     GroupName = new List<string>(); 

     // call 'GetMembers' on 'SearchGroup' here!! 
     foreach (UserPrincipal p in SearchGroup.GetMembers()) 
     { 
      GroupName.add(p.SamAccountName); 
     } 
    } 
} 
+1

実行時/コンパイルエラーが発生しません。 foreachループを実行する前にループリストを返すようにPの値を設定する必要がありますか? – Matt

+2

完全に無視されます - 私のテストは頭を使っていました - 私はassert.isnullでassert.isnotnullではありませんでした - すべて今は大丈夫です! – Matt

3

あなたのコードのこの変更は動作します(私が保証するためのテストをした):

private static readonly string DomainName = "domaincontrollercomputer.domain.com"; 
    private static readonly string DomainContainer = "DC=DOMAIN,DC=COM"; 
    private static readonly string ADGroupName = "AD Group Name"; 
    private List<string> GroupName {get;set;} 

    private void populateGroups() 
    { 
     using (var ctx = new PrincipalContext(ContextType.Domain, DomainName, DomainContainer)) 
     { 
      using (var grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, ADGroupName)) 
      { 
       GroupName = new List<string>(); 
       foreach (var member in grp.GetMembers()) 
       { 
        GroupName.Add(member.SamAccountName); 
       } 
      } 
     } 
    }