I've done the exact same thing few weeks ago. I used the System.DirectoryServices.ActiveDirectory
library, and used the Domain
and DomainController
objects to find what you are looking for.
Here is the code I'm using:
public static class DomainManager
{
static DomainManager()
{
Domain domain = null;
DomainController domainController = null;
try
{
domain = Domain.GetCurrentDomain();
DomainName = domain.Name;
domainController = domain.PdcRoleOwner;
DomainControllerName = domainController.Name.Split('.')[0];
ComputerName = Environment.MachineName;
}
finally
{
if (domain != null)
domain.Dispose();
if (domainController != null)
domainController.Dispose();
}
}
public static string DomainControllerName { get; private set; }
public static string ComputerName { get; private set; }
public static string DomainName { get; private set; }
public static string DomainPath
{
get
{
bool bFirst = true;
StringBuilder sbReturn = new StringBuilder(200);
string[] strlstDc = DomainName.Split('.');
foreach (string strDc in strlstDc)
{
if (bFirst)
{
sbReturn.Append("DC=");
bFirst = false;
}
else
sbReturn.Append(",DC=");
sbReturn.Append(strDc);
}
return sbReturn.ToString();
}
}
public static string RootPath
{
get
{
return string.Format("LDAP://{0}/{1}", DomainName, DomainPath);
}
}
}
And then, You simply call DomainManager.DomainPath
, everything is initialized once (it avoids resource leaks) or DomainName
and so on. Or RootPath, which is very useful to initialize the root DirectoryEntry
for DirectorySearcher
.
I hope this answers your question and could help.