2011-11-29 13 views
6

मैं सक्रिय निर्देशिका पूछताछ करके अपने स्थानीय कंप्यूटर के objectGuid को खोजने के लिए सी # का उपयोग कर रहा हूं। , मैं वर्तमान में एक DirectorySearcher उपयोग कर रहा हूँ, यह खोज रूट के रूप में एक (hardcoded) पथ से गुजर रहा है, और फिर कंप्यूटर का नाम के आधार पर फ़िल्टर ऐसा करने के लिए:क्या एडी में स्थानीय कंप्यूटर को अपने डोमेन को हार्डकोड किए बिना खोजना संभव है?

string adRootPath = @"LDAP://OU=foo,DC=bar,DC=baz,DC=com";  
DirectoryEntry adRoot = new DirectoryEntry(adRootPath); 

DirectorySearcher searcher = new DirectorySearcher(adRoot); 
searcher.Filter = @"(&(objectCategory=Computer)(CN=" + Environment.MachineName + "))"; 

मैं खोज जड़ को हार्डकोड नहीं करना चाहता है, और यह सोच रहा था कि कोई बेहतर तरीका है या नहीं। मैंने बस एक खाली खोज रूट का उपयोग करने के बारे में सोचा, लेकिन मुझे चिंता थी कि कंप्यूटर नाम हमेशा अलग-अलग डोमेन में अद्वितीय नहीं हो सकते हैं।

क्या कोई बेहतर तरीका है? आप पहले से ही नहीं है, तो

// create your domain context 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// define a "query-by-example" principal - here, we search for a ComputerPrincipal 
// and with the name of "MyPC" 
ComputerPrincipal cp = new ComputerPrincipal(ctx); 
cp.Name = "MyPC"; 

// create your principal searcher passing in the QBE principal  
PrincipalSearcher srch = new PrincipalSearcher(cp); 

// find all matches 
foreach(var found in srch.FindAll()) 
{ 
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....   
} 

- बिल्कुल:

उत्तर

8

आप .NET 3.5 या नए पर हैं, तो आप एक PrincipalSearcher और एक "क्वेरी-दर-उदाहरण के लिए" प्रिंसिपल उपयोग कर सकते हैं अपने खोज करने के लिए एमएसडीएन आलेख Managing Directory Security Principals in the .NET Framework 3.5 पढ़ें जो अच्छी तरह से दिखाता है कि System.DirectoryServices.AccountManagement

+0

धन्यवाद। FindAll() को केवल एक परिणाम (यह स्थानीय कंप्यूटर होने) की गारंटी दी जाएगी, भले ही विभिन्न ओयू में डुप्लिकेट कंप्यूटर नाम हों? – Eric

+0

@Eric: नहीं, 'FindAll()' ** ** सभी ** अवसरों को मिलेगा जो निर्दिष्ट मानदंडों से मेल खाते हैं (जैसा कि इसका नाम इंगित करता है)। फिर आप निरीक्षण कर सकते हैं उदा। 'कंप्यूटर प्रिंसिपल' पर 'विशिष्ट नाम 'संपत्ति यह देखने के लिए कि कंप्यूटर के एडी पेड़ में कहां रहता है। एक'FindOne() 'विधि भी है जो पहला मैच लौटाती है - लेकिन आपको शायद यह नहीं पता कि आपके मानदंडों से मेल खाने वाले अन्य कंप्यूटर हैं। –

+0

आह मैं देखता हूँ। खैर, मैं वास्तव में * स्थानीय * कंप्यूटर की एडी जानकारी खोजने की कोशिश कर रहा हूं। ऐसा लगता है कि इस विधि के साथ, मेरे पास मेरे कंप्यूटर में कौन सा कंप्यूटर स्थानीय कंप्यूटर है यह अंतर करने का कोई तरीका नहीं होगा। – Eric

1

में नई सुविधाओं का सबसे अच्छा उपयोग कैसे करें, आपको रूट रूट को कॉल करके डोमेन प्राप्त करने में सक्षम होना चाहिए।

इस साइट पर एक अच्छा उदाहरण है - Site with an example of RootDSE

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

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