I'm developing a library with C# and .NET Framework 4.0.
I want to retrieve all active directory users and it works great. But my problem if I run my program on another domain I have to change this:
private static string ldapPath = "LDAP://DC=ic,DC=local";
And recompile it with the new data for the new domain.
Is there any way to get "LDAP://DC=ic,DC=local"
dynamically?
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.
Yes there is, what you are looking for is the default naming context, that information is held in the RootDSE context which is common to all domains:
DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");
string defaultNamingContext = rootDSE.Properties["defaultNamingContext"].Value;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With