मुझे पता है कि इस प्रकार के प्रश्न से पहले पूछा गया है, लेकिन अन्य विधियां अभी मुझे विफल कर रही हैं।सी # सक्रिय निर्देशिका: उपयोगकर्ता का डोमेन नाम प्राप्त करें?
चूंकि यह हमारे विंडोज सेवा चुनाव एडी है, एलडीएपी (यानी एलडीएपी: //10.32.16.80) और उस विज्ञापन सर्वर के भीतर उपयोगकर्ता समूह की एक सूची दी गई है। यह उन समूहों के भीतर सभी उपयोगकर्ताओं को पुनर्प्राप्त करता है, जो उन समूहों को अधिक समूहों के लिए खोजते हैं। प्रत्येक उपयोगकर्ता को तब अन्य उपयोगकर्ताओं को प्रमाणित उपयोगकर्ता सूची में जोड़ा जाता है।
एप्लिकेशन का यह हिस्सा सफलतापूर्वक चल रहा है। हालांकि, हमें प्रत्येक उपयोगकर्ता के अनुकूल डोमेन नाम (यानी उनके लॉगिन डोमेन/उपयोगकर्ता नाम का हिस्सा) की आवश्यकता है
तो यदि कोई उपयोगकर्ता है जो टेस्ट डोमेन का हिस्सा है, स्टीव: टेस्ट/स्टीव उसका लॉगिन है । मैं एडी में स्टीव ढूंढने में सक्षम हूं, हालांकि मुझे अपनी एडी जानकारी के साथ "टेस्ट" स्टोर करने की भी आवश्यकता है।
फिर से, मुझे एक निर्देशिका खोजकर्ता और एलडीएपी आईपी का उपयोग करके 'स्टीव' जुर्माना मिल सकता है, लेकिन एलडीएपी आईपी दिया गया है, मैं दोस्ताना डोमेन नाम कैसे प्राप्त कर सकता हूं?
जब मैं निम्नलिखित कोड जब 'defaultNamingContext' तक पहुँचने का प्रयास करने पर मुझे त्रुटि दिया हूँ कोशिश:
System.Runtime.InteropServices.COMException (0x8007202A): प्रमाणीकरण तंत्र अज्ञात है।
private string SetCurrentDomain(string server)
{
string result = string.Empty;
try
{
logger.Debug("'SetCurrentDomain'; Instantiating rootDSE LDAP");
DirectoryEntry ldapRoot = new DirectoryEntry(server + "/rootDSE", username, password);
logger.Debug("'SetCurrentDomain'; Successfully instantiated rootDSE LDAP");
logger.Debug("Attempting to retrieve 'defaultNamingContext'...");
string domain = (string)ldapRoot.Properties["defaultNamingContext"][0]; //THIS IS WHERE I HIT THE COMEXCEPTION
logger.Debug("Retrieved 'defaultNamingContext': " + domain);
if (!domain.IsEmpty())
{
logger.Debug("'SetCurrentDomain'; Instantiating partitions/configuration LDAP entry");
DirectoryEntry parts = new DirectoryEntry(server + "/CN=Partitions,CN=Configuration," + domain, username, password);
logger.Debug("'SetCurrentDomain'; Successfully instantiated partitions/configuration LDAP entry");
foreach (DirectoryEntry part in parts.Children)
{
if (part.Properties["nCName"] != null && (string)part.Properties["nCName"][0] != null)
{
logger.Debug("'SetCurrentDomain'; Found property nCName");
if ((string)part.Properties["nCName"][0] == domain)
{
logger.Debug("'SetCurrentDomain'; nCName matched defaultnamingcontext");
result = (string)part.Properties["NetBIOSName"][0];
logger.Debug("'SetCurrentDomain'; Found NetBIOSName (friendly domain name): " + result);
break;
}
}
}
}
logger.Debug("finished setting current domain...");
}
catch (Exception ex)
{
logger.Error("error attempting to set domain:" + ex.ToString());
}
return result;
}
संपादित
मैं आदेश एक सुझाव प्रयास करने के लिए, लेकिन एक अपवाद हो रही है में इस नमूने विधि कहा:: जब मैं "FindAll हिट" अनिर्दिष्ट त्रुटि "
यहाँ कोड है() "खोजकर्ता पर कॉल करें। स्ट्रिंग में पारित किया जा रहा है: "सीएन = जांच उपयोगकर्ता, सीएन = उपयोगकर्ता, डीसी = Tempe, डीसी = ktregression, डीसी = कॉम"
private string GetUserDomain(string dn)
{
string domain = string.Empty;
string firstPart = dn.Substring(dn.IndexOf("DC="));
string secondPart = "CN=Partitions,CN=Configuration," + firstPart;
DirectoryEntry root = new DirectoryEntry(secondPart, textBox2.Text, textBox3.Text);
DirectorySearcher searcher = new DirectorySearcher(root);
searcher.SearchScope = SearchScope.Subtree;
searcher.ReferralChasing = ReferralChasingOption.All;
searcher.Filter = "(&(nCName=" + firstPart + ")(nETBIOSName=*))";
try
{
SearchResultCollection rs = searcher.FindAll();
if (rs != null)
{
domain = GetProperty(rs[0], "nETBIOSName");
}
}
catch (Exception ex)
{
}
return domain;
क्या वर्तमान डोमेन के समान वन के अंतर्गत 'टेस्ट' डोमेन है? यदि ऐसा है, तो आप इस उपयोगकर्ता के लिए सही डोमेन से पूछ सकते हैं, क्योंकि उपयोगकर्ता आपके वर्तमान डोमेन में मौजूद हो सकता है, लेकिन दूसरे में नहीं। –
हां, टेस्ट डोमेन वर्तमान डोमेन के समान वन में होगा। उस संबंध में, मैं किसी दिए गए उपयोगकर्ता के लिए डोमेन से पूछताछ के बारे में कैसे जा सकता हूं? ध्यान रखें कि मेरा एडी ज्ञान सीमित है, इसमें मुझे एलडीएपी तारों और इस तरह के निर्माण पर अच्छी तरह से जानकारी नहीं है ... –
संभावित डुप्लिकेट [एनटी शैली डोमेन \ उपयोगकर्ता को डीएन प्राप्त करें] प्राप्त करें (http://stackoverflow.com/ प्रश्न/17 9 6426/get-nt-style-domain-user-given-dn) - यह उपयोगकर्ता के डीएन को अपने नेटबीओएस डोमेन नाम में कनवर्ट करने के बारे में जानकारी प्रदान करता है, जो आप यहां चाहते हैं। –