2011-03-09 23 views
6

GroupPrincipal (System.DirectoryServices.AccountManagement ad alanının bir parçası) türünde bir dize listesi doldurmaya çalışıyorum, bu yüzden bir kullanıcının bir Active Directory grubunun üyesi olup olmadığını kontrol edebilirim. Şimdiye kadar yazdığım düzenlenmiş sınıf:Active Directory Kullanıcı Grubu Üyelikler 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); 
     } 
    } 

Peki, nerede yanlış gidiyorum? (!! btw NULL kontrol) Eğer SearchGroup içine grup müdürü alıyoruz ve daha sonra tutuyorsun - peşin :)

+2

? ?? –

+1

Matt bu gerçek bir soru değil, bu kod nasıl çalışıyor? Hangi sonuçları alırsınız? Kesme noktaları ile kontrol ederseniz hata ayıklama zamanında nasıl davranır? Şu an aldığınızdan farklı olarak ne almak istiyorsun? –

+1

Üzgünüz, kullanıcıların listesini alamıyorum; GroupName değeri boş. Bir kullanıcı listesini görmeyi bekliyorum (o grubun üyesi olan kullanıcıların olduğunu biliyorum) - bu mantıklı mı? – Matt

cevap

0

yılında

teşekkürler ben size yönteminde basit bir yazım hatası olduğunu düşünüyorum üyeler GroupName kapalı ??

bu deneyin:

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

Çalışma zamanı/derleme hatası almıyorum. P değerinin doldurulmasına gerek var mı (etkili bir şekilde bana kullanıcıların listesini foreach döngüsünden geçmeden önce geçecek bir liste veriyor muyum? – Matt

+2

Tamamen beni görmezden geliyorum - test başımla oynuyordu - ben assert.isnull ve assert.isnotnull - her şey yolunda! – Matt

3

kodunuzun Bu modifikasyon (I sağlamak için testler yapılmış) çalışır: ** ** ne görmeyi beklediği do görüyor musunuz ne

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); 
       } 
      } 
     } 
    } 
İlgili konular