Saturday 15 January 2011

Check if Active Directory Group exists in current container using C# -


मैं एक नया सक्रिय निर्देशिका समूह बनाना चाहता हूं।

यह मेरा कोड है:

  प्रिंसिपल कंटैक्सएक्स सीटीएक्स = नया प्रिंसिपल कंसटेक्स (कंटैक्सटाइप। डोमेन, डोमेन, कंटेनर, यूज़रनेम, पासवर्ड); ग्रुपपिननल ग्रुप प्रिंसिपल = नया ग्रुपपिननल (ctx, userName); DirectoryEntry प्रविष्टि = नया निर्देशिकाइंटर्री ("एलडीएपी: //" + डोमेन, उपयोगकर्ता नाम, पासवर्ड, प्रमाणीकरण प्रकार। सिकर); अगर (प्रविष्टि। बच्चे.फिन्ड ("सीएन =" + समूहनाम)! = नल) {} यदि (! निर्देशिकाईंट्री। एक्सिस ("एलडीएपी: //" + सिस्टम। कॉन्फ़िगरेशन। कॉन्फ़िगरेशन प्रबंधक.AppSettings ["डोमेन"] + "/ CN = "+ समूहनाम +", "+ सिस्टम। कॉन्फ़िगरेशन। कॉन्फ़िगरेशन प्रबंधक। ऐप सेटिंग्स [" कंटेनर "])) {oGroupPrincipal.Description = groupName; OGroupPrincipal.GroupScope = (System.DirectoryServices.AccountManagement.GroupScope) Enum.Parse (टाइपफ (System.DirectoryServices.AccountManagement.GroupScope), groupScope); OGroupPrincipal.IsSecurityGroup = सुरक्षा है; oGroupPrincipal.Save (ctx); }   

जिस भाग के साथ मुझे परेशान हो रहा है यह देखने के लिए है कि नया बनाए गए समूह इसे बनाने से पहले मौजूद है या नहीं। इस चरण पर मेरा कोड रिटर्न करता है कि अल समूह मौजूद है, इसलिए मैं एक समूह बनाने में असमर्थ हूं

यह जांचने के लिए है कि समूह मौजूद है:

  यदि (प्रविष्टि।  

लेकिन यह एक अपवाद देता है सर्वर पर ऐसा कोई ऑब्जेक्ट नहीं है।

कोई भी मदद मिलेगी ("CN =" + groupName)! = Null) {}

आप (झूठे) धारणा के तहत होना प्रतीत होता है कि एक प्रविष्टि बच्चे।

इसलिए, आपको वास्तविक कंटेनर से बाइंड करने की आवश्यकता है, जहां से उस समूह को स्थित होना चाहिए, और उसके बाद अपने समूह के अस्तित्व के लिए अपने तत्काल बच्चों की जांच करनी चाहिए:

  DirectoryEntry entry = new DirectoryEntry ("LDAP: // YourServer / OU = सबओ, ओयू = टॉप लेवेल, डीसी = परीक्षा, डीसी = कॉम ", उपयोगकर्ता नाम, पासवर्ड, प्रमाणीकरण प्रकार। सुरक्षित); {DirectoryEntry childGroup = entry.Children.Find ("CN = TestGroup2") का प्रयास करें; // यहाँ समूह बनाएँ} पकड़ (DirectoryServicesCOMException अपवाद) {// "बच्चे नहीं मिला" मामले को यहाँ संभालें ...}   

या फिर आपको एक निर्देशिका खोज करने की ज़रूरत है अपने समूह के लिए जो आपकी संपूर्ण निर्देशिका (और इस तरह से बहुत धीमी भी होगी) के द्वारा लगातार काम करता है:

  // परिभाषित करें रूट निर्देशिका प्रविष्टि Entry domainRoot = नया निर्देशिकाइंटर्री ("एलडीएपी: //" + डोमेन, यूज़रनेम, पासवर्ड, प्रमाणीकरण प्रकार। सिकर); // सबट्री के लिए सेटअप खोजकर्ता और समूहों के लिए खोज निर्देशिका खोजकर्ता डीएस = नई निर्देशिका खोजकर्ता (डोमेनआरूट); Ds.SearchScope = SearchScope.SubTree; Ds.Filter = "(& amp; (cn = TestGroup2) (objectCategory = समूह))"; Var परिणाम = ds.FindAll (); यदि (परिणाम.काउंट & lt; = 0) {// समूह नहीं मिला - & gt; बनाओ}    

No comments:

Post a Comment