我正在编写一些针对Active Directory的c#,并且无休止地尝试使其工作无济于事。以下代码有效,其后面的代码不起作用:
以下代码使用“WinNT://”+ Environment.MachineName +“,Computer”来建立连接并正常工作。
DirectoryEntry localMachine = new DirectoryEntry
("WinNT://" + Environment.MachineName + ",Computer");
DirectoryEntry admGroup = localMachine.Children.Find
("Administrators", "group");
object members = admGroup.Invoke("members", null);
foreach (object groupMember in (IEnumerable)members)
{
DirectoryEntry member = new DirectoryEntry(groupMember);
output.RenderBeginTag("p");
output.Write(member.Name.ToString());
output.RenderBeginTag("p");
}
base.Render(output);
我现在正试图改变这条线:
"WinNT://" + Environment.MachineName + ",Computer"
到
"LDAP://MyDomainControllerName"
但似乎无论我尝试用什么价值取代价值'MyDomainControllerName'它都不会起作用。
要获取'MyDomainControllerName'值,我右键单击MyComputer并按照其他地方的建议复制计算机名称值,但这不起作用。
当我尝试使用上面的LDAP:// RootDSE选项时,会导致以下错误:
位于路径LDAP:// RootDSE的Active Directory对象不是容器
这是你提到的成员方法的问题吗?
答案 0 :(得分:6)
使用.NET Framework连接到AD时,可以使用“无服务器”绑定,也可以指定每次使用的服务器(服务器绑定)。
以下是使用两者的示例:
// serverless
DirectoryEntry rootConfig = new DirectoryEntry("LDAP://dc=domainname,dc=com");
// server bound
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://domainControllerName/dc=domainName,dc=com");
我认为你误入歧途的地方是你忘了在你的域名中加入FQDN。希望这会有所帮助。
答案 1 :(得分:6)
是 - RootDSE不是容器 - 但它包含许多有趣的属性,您可以查询 - 例如域控制器的名称。
您可以使用以下代码检查这些:
DirectoryEntry deRoot = new DirectoryEntry("LDAP://RootDSE");
if (deRoot != null)
{
Console.WriteLine("Default naming context: " + deRoot.Properties["defaultNamingContext"].Value);
Console.WriteLine("Server name: " + deRoot.Properties["serverName"].Value);
Console.WriteLine("DNS host name: " + deRoot.Properties["dnsHostName"].Value);
Console.WriteLine();
Console.WriteLine("Additional properties:");
foreach (string propName in deRoot.Properties.PropertyNames)
Console.Write(propName + ", ");
Console.WriteLine();
}
或者省去麻烦并在C#源代码中抓住我的“Beavertail ADSI Browser” - 详细说明如何连接到RootDSE及其提供的内容。
答案 2 :(得分:0)
您需要传递一个授权的用户名和密码 尝试设置:DirectoryEntry.Username和DirectoryEntry.Password
答案 3 :(得分:0)
您是否尝试过指定端口号和其他参数?
我们的ldap字符串如下所示:LDAP:// myserver:1003/cn=admin@xyz.com | 1,ou =成员,o = mdhfw2
答案 4 :(得分:0)
看起来您需要获取LDAP连接信息。您可以调用LDAP:// RootDSE来获取ASP.NET Wiki。
中显示的信息请记住,LDAP对象没有与WINNT对象相同的成员方法和属性,因此不要指望group.Invoke(“members”)和其他函数完全相同。您也应该使用LDAP阅读DirectoryServices documentation。