2011-03-09 18 views
6

मैं टाइप स्ट्रिंग की एक सूची पॉप्युलेट करने के लिए GroupPrincipal (System.DirectoryServices.AccountManagement नेमस्पेस का हिस्सा) का उपयोग करने का प्रयास कर रहा हूं, इसलिए मैं यह देखने के लिए जांच सकता हूं कि कोई उपयोगकर्ता सक्रिय निर्देशिका समूह का सदस्य है या नहीं। यहां संपादित कक्षा है जिसे मैंने अभी तक लिखा है:सक्रिय निर्देशिका उपयोगकर्ता समूह सदस्यता समूह प्रिंसिपल

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

मैट यह वास्तविक सवाल नहीं है, यह कोड कैसे काम करता है? आपको कौन से परिणाम मिलते हैं? यदि आप ब्रेकपॉइंट्स के साथ जांच करते हैं तो यह डीबग समय पर कैसे व्यवहार करता है? अब आप जो प्राप्त कर रहे हैं उससे अलग होना चाहते हैं? –

+1

क्षमा करें, मुझे उपयोगकर्ताओं की सूची नहीं मिल रही है; ग्रुपनाम का मूल्य शून्य है। मैं उपयोगकर्ताओं की एक सूची देखने की उम्मीद करता हूं (मुझे पता है कि ऐसे उपयोगकर्ता हैं जो उस समूह के सदस्य हैं) - क्या यह समझ में आता है? – Matt

उत्तर

0

धन्यवाद मुझे लगता है कि आप अपने विधि में एक साधारण टाइपो है - आप SearchGroup में समूह प्रिंसिपल हो रही है (शून्य के लिए जाँच, btw !!) और फिर आप हथियाने रहे हैं 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

मुझे रन-टाइम/संकलन त्रुटि नहीं मिल रही है। क्या मुझे पी के मूल्य को पॉप्युलेट करने की ज़रूरत है (प्रभावशाली रूप से मुझे फोरच लूप के माध्यम से चलने से पहले लूप के लिए उपयोगकर्ताओं की एक सूची दे रही है? – Matt

+2

पूरी तरह से मुझे अनदेखा करें - मेरा परीक्षण मेरे सिर के साथ खेल रहा था - मैंने जोर दिया था। नहीं और 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); 
       } 
      } 
     } 
    } 
संबंधित मुद्दे

 संबंधित मुद्दे