Возможно, у вас есть компания с одним форрестом (company.com) и парой дочерних доменов (САЙТ и ОТДЕЛ в вашем случае). Биты SITE- и DEPARTMENT являются представлениями доменов NetBIOS. Не очень часто они отличаются от соответствующих имен DNS, но это возможно. Просто убедитесь, что мы не говорим о подразделениях и «физических» сайтах Active Directory.
Предполагая, что выше, вот несколько вариантов:
Предполагается, что ваше приложение работает под учетной записью с «forrest-wide read read» (возможностью доступа к вашим различным доменам):
using System.DirectoryServices.ActiveDirectory;
// ...
DirectoryContext directoryContext
= new DirectoryContext(DirectoryContextType.Domain, "DEPARTMENT");
Domain domain = Domain.GetDomain(directoryContext);
String domainName = domain.Name;
String domainComponent = "DC=" + domainName.Replace(".", ",DC=");
Console.WriteLine(domainComponent);
(Я не нашел "встроенного в System.DirectoryServices" способа преобразования domain.company.com в DC = domain, DC = company, DC = com, но простое манипулирование строками, описанное выше, должно сработать. )
Если вы используете учетную запись не forrest-wide (или если DEPARTMENT и SITE не являются доменами в одном и том же forrest, но сами по себе являются отдельными forrests), вам придется вести список имен пользователей и паролей для использования в зависимости от строк "DEPARTMENT" или "SITE":
// if(domainNetBios == "DEPARMENT")...
DirectoryContext directoryContext
= new DirectoryContext(DirectoryContextType.Domain,
"DEPARTMENT",
"UserInDEPARTMENT",
"PassForUserInDEPARTMENT");
Если вы не хотите связываться с разными лесами / доменами, чтобы получить доменное имя / компонент, вы можете попробовать что-то вроде:
IPAddress[] addresses = Dns.GetHostAddresses("DEPARTMENT");
IPHostEntry host = Dns.GetHostEntry(addresses[0]);
Int32 dotIndex = host.HostName.IndexOf('.');
String domain =
host.HostName.Substring(dotIndex + 1, host.HostName.Length - dotIndex - 1);
Console.WriteLine(domain);
Но вышеизложенное предполагает, что NETBios-имя совпадает с первой частью DNS-имени и что разрешение DNS работает правильно. То, что мы делаем выше, - это запросить список контроллеров домена и затем удалить имена хостов из DNS-имен. Не особо чистый вариант ...