我試圖通過c#獲取當前的域控制器名稱。此代碼不會在登錄會話期間運行。它在機器啓動期間運行,所以我不能使用%logonserver%變量,因爲在機器啓動時沒有這樣的事情。在這裏搜索我認爲下面的代碼可以工作,但它會返回主域控制器,而不是當前的登錄服務器。 (啓動時的「登錄服務器」可能是最好被稱爲「認證服務器」)確定當前的域控制器名稱
,這並不爲我工作(不返回機器目前的DC,返回域的PDC)
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
string controller = context.ConnectedServer;
Console.WriteLine("Domain Controller: " + controller);
}
我發現下面的WMI查詢獲取積極的結果,但是,它的速度慢:
ManagementObjectSearcher搜索= 新ManagementObjectSearcher( 「ROOT \ CIMV2」, 「SELECT * FROM Win32_NTDomain」);
foreach (ManagementObject queryObj in searcher.Get())
{
if (queryObj["DomainControllerName"] != "")
Console.WriteLine("DomainControllerName: {0}", queryObj["DomainControllerName"]);
}
任何人都知道更好的方法?
一些思考。請記住,域中可能有**多個**域控制器,而不僅僅是一個。我們有兩個,我認爲三個是理想的,因爲有三個主要的功能域控制器可以做(這是從內存這一點上)。那麼,您認爲哪個域控制器是「當前」? – Jim 2011-04-15 00:14:10
如果機器沒有登錄到域,正如您所說的「_...它在機器啓動過程中運行......」那麼用戶和機器都沒有登錄到域,我相信同樣的應用於用戶的事實適用於機器,但機器上下文還沒有_current_域控制器。我可能是錯的,但我相信這是事實。 – 2011-04-15 01:10:40
感謝您的回覆。我的環境中有15或16個DC。一些物理位置有1個,有些有3個。 – 2011-04-18 13:53:08