我想弄清楚Active Directory域服务是否安装了Windows服务器。如何确定服务器上是否安装了“Active Directory域服务”角色
我知道他们在Server Manager中显示出来,但如果角色在服务器上使用C#代码
我想弄清楚Active Directory域服务是否安装了Windows服务器。如何确定服务器上是否安装了“Active Directory域服务”角色
我知道他们在Server Manager中显示出来,但如果角色在服务器上使用C#代码
如果你知道你要测试,可与域管理员权限的远程运行程序的服务器的名称,你可以使用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");
的角色及其ID号的完整列表,请参阅MSDN reference on Win32_ServerFeature。
如果你的问题是,以查看服务器是否是域控制器安装了以编程方式获得,你可以枚举域中的域控制器并检查您正在坐的服务器的主机名,以查看它是否与它们中的任何一个匹配。为了得到域控制器列表:
var domainControllers = new List<string>();
var domain = Domain.GetCurrentDomain();
foreach (var dc in domain.DomainControllers)
{
domainControllers.Add(dc.Name);
}
string whoami = Dns.GetHostname();
确保添加必需的错误处理(比如,如果你在工作组计算机上运行它,它会死)。
编辑:检测DCPROMO 备用方式(因为它可以安装域服务没有DCPROMO,这是一件坏事):
1)解析出(并检查是否存在)的调试日志当DCPROMO做它的事情时创建。应位于C:\ WINDOWS \调试\ dcpromo.log
2)本DSQUERY命令速度快,会给你在哪里DCPROMO是RAN的所有服务器:
dsquery * "cn=Sites,cn=Configuration,dc=MyDomain,dc=com" -Filter "(cn=NTDS Settings)" -attr distinguishedName whenCreated
问题越来越从命令如果您使用Process启动它,则会显示在线输出工作的方式来做到这一点,并将更新一次,我有它的测试,因为我没有做过一段时间的查询AD筛选。
如果域中有很多域控制器,并且它们遍布全球,则这可能需要很长时间。需要一些非常快速的东西......并且只针对程序运行的计算机。 – user3174075 2014-08-29 21:38:49
你问什么角色?所有这些,还是只有DC? – 2014-08-29 21:27:47
Active Directory域服务角色 – user3174075 2014-08-29 21:37:35
谢谢。我已经改变了你的标题,以明确你不需要一个通用机制来查找服务器上的所有角色。 – 2014-08-29 23:45:52