How to determine if the “Active Directory Domain Services” role has been installed on a server

守給你的承諾、 提交于 2019-12-23 10:08:18

问题


I am trying to figure out if the Active Directory Domain Services are installed a windows server.

I know they show up in the Server Manager, but can I programmatically get if the role is installed on a server using C# code


回答1:


If you know the name of the server you want to test and can run the program with domain admin privileges remotely, you can use 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;
}

If you're running that locally on the server, the WMI path changes to:

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

See the MSDN reference on Win32_ServerFeature for a full list of roles and their ID numbers.




回答2:


If your question is to see if a server is a domain controller, you can enumerate the domain controllers in the domain and check the hostname of the server you are sitting on to see if it matches any of them. To get the list of domain controllers:

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

Make sure to add requisite error handling (like if you run this on a workgroup computer, it will die).

EDIT: Alternate ways of detecting DCPROMO (because it's possible to install Domain Services without DCPROMO, and that is a bad thing):

1) Parse out (and check for the existence of) the debug log that is created when DCPROMO does its thing. Should be located at c:\windows\debug\dcpromo.log

2) This DSQUERY command is FAST and will give you all the servers where DCPROMO was ran:

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

Problem is getting that from command line output if you started it using Process. Working on a way to do this and will update once I have it tested, as I haven't done AD filtering in a query for a while.



来源:https://stackoverflow.com/questions/25573129/how-to-determine-if-the-active-directory-domain-services-role-has-been-install

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!