我想弄清楚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