2014-08-29 6 views
5

पर "सक्रिय निर्देशिका डोमेन सेवा" भूमिका स्थापित की गई है, तो मैं यह पता लगाने की कोशिश कर रहा हूं कि सक्रिय निर्देशिका डोमेन सेवा Windows सर्वर स्थापित है या नहीं।यह निर्धारित करने के लिए कि क्या सर्वर

मैं वे सर्वर प्रबंधक में दिखाई पता है, लेकिन अगर भूमिका में अपने प्रश्न करता है, तो एक सर्वर डोमेन नियंत्रक है देखने के लिए है, तो सी # कोड

+0

आप किस भूमिका के बारे में पूछ रहे हैं? उनमें से सभी, या केवल डीसी? –

+0

सक्रिय निर्देशिका डोमेन सेवा भूमिका – user3174075

+0

धन्यवाद। मैंने यह स्पष्ट करने के लिए अपना शीर्षक बदल दिया है कि आपको सर्वर पर _all_ भूमिकाओं के बारे में जानने के लिए सामान्य तंत्र की आवश्यकता नहीं है। –

उत्तर

3

आप सर्वर आप परीक्षण करना चाहते और डोमेन व्यवस्थापक विशेषाधिकारों दूर के साथ कार्यक्रम चला सकते हैं का नाम, पता है आप WMI का उपयोग कर सकते हैं:

internal static bool IsDomainController(string ServerName) 
{ 
    StringBuilder Results = new StringBuilder(); 

    try 
    { 
     ManagementObjectSearcher searcher = 
      new ManagementObjectSearcher("\\\\" + ServerName + "\\root\\CIMV2", 
      "SELECT * FROM Win32_ServerFeature WHERE ID = 10"); 

     foreach (ManagementObject queryObj in searcher.Get()) 
     { 
      Results.AppendLine(queryObj.GetPropertyValue("ID").ToString()); 
     } 
    } 
    catch (ManagementException) 
    { 
     //handle exception 
    } 

    if (Results.Length > 0) 
     return true; 
    else 
     return false; 
} 

आप स्थानीय रूप से सर्वर पर कि चला रहे हैं, WMI पथ में परिवर्तन करने के लिए:

 ManagementObjectSearcher searcher = 
      new ManagementObjectSearcher("root\\CIMV2", 
      "SELECT * FROM Win32_ServerFeature WHERE ID = 10"); 

भूमिका और उनके आईडी नंबर की एक पूरी सूची के लिए MSDN reference on Win32_ServerFeature देखें।

2

का उपयोग कर एक सर्वर पर स्थापित किया गया है मैं प्रोग्राम के रूप में प्राप्त कर सकते हैं, आप कर सकते हैं डोमेन में डोमेन नियंत्रकों की गणना करें और उस सर्वर के होस्टनाम की जांच करें जिसे आप बैठे हैं यह देखने के लिए कि क्या यह उनमें से किसी से मेल खाता है या नहीं।

 var domainControllers = new List<string>(); 
     var domain = Domain.GetCurrentDomain(); 
     foreach (var dc in domain.DomainControllers) 
     { 
      domainControllers.Add(dc.Name); 
     } 
     string whoami = Dns.GetHostname(); 

निपटने अपेक्षित त्रुटि जोड़ने के लिए सुनिश्चित करें कि (जैसा कि आप किसी कार्यसमूह कंप्यूटर पर इस चलाने के लिए, वह मर जाएगा): डोमेन नियंत्रकों की सूची प्राप्त करने के लिए।

संपादित करें:

1) बाहर पार्स (और के होने की जाँच) डीबग लॉग: DCPROMO का पता लगाने में वैकल्पिक तरीकों (क्योंकि यह DCPROMO बिना डोमेन सेवा स्थापित करना संभव है, और यह एक बुरी बात है) यह तब बनाया जाता है जब डीसीपीरोमो अपनी बात करता है। सी में स्थित होना चाहिए: \ windows \ डिबग \ Dcpromo.log

2) इस DSQUERY आदेश फास्ट है और आप सभी सर्वरों जहां DCPROMO चलाया गया था दे देंगे:

dsquery * "cn=Sites,cn=Configuration,dc=MyDomain,dc=com" -Filter "(cn=NTDS Settings)" -attr distinguishedName whenCreated 

समस्या हो रही है कि आदेश से यदि आप प्रक्रिया का उपयोग कर इसे शुरू करते हैं तो लाइन आउटपुट। ऐसा करने के लिए एक तरीके से काम करना और परीक्षण करने के बाद अपडेट हो जाएगा, क्योंकि मैंने थोड़ी देर के लिए एक क्वेरी में एडी फ़िल्टरिंग नहीं की है।

+0

यदि आपके पास डोमेन में बहुत से डोमेन नियंत्रक हैं और यदि वे दुनिया भर में फैले हैं तो यह एक लंबा समय ले सकता है। कुछ ऐसी चीज चाहिए जो बहुत तेज़ है ... और केवल कंप्यूटर के लिए प्रोग्राम चल रहा है। – user3174075

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