我尝试使用下面的代码获取用户的完整列表。但是我得到代码“服务器无法联系。”从LDAP获取用户的完整列表
有什么想法?
感谢,
static void Main(string[] args)
{
string groupName = "Domain Users";
string domainName = "LDAP://ldap.mycompany.be:389/ou=users,o=mycompany,dc=mycompany,dc=be";
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName);
GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, groupName);
if (grp != null)
{
foreach (Principal p in grp.GetMembers(false))
{
Console.WriteLine(String.Format("{0} - {1}", p.SamAccountName, p.DisplayName));
}
grp.Dispose();
ctx.Dispose();
Console.ReadLine();
}
else
{
Console.WriteLine("\nWe did not find that group in that domain, perhaps the group resides in a different domain?");
Console.ReadLine();
}
}
更新:此代码工作(从同一台机器)
static void Main(string[] args)
{
string userUid = "myuser";
DirectoryEntry Ldap = new DirectoryEntry("LDAP://ldap.mycompany.be:389/ou=users,o=mycompany,dc=mycompany,dc=be", "", "", AuthenticationTypes.Anonymous);
DirectorySearcher LdapSearcher = new DirectorySearcher(Ldap, String.Format("(&(objectClass=*)(uid={0}))", userUid));
LdapSearcher.PropertiesToLoad.Add("cn");
LdapSearcher.PropertiesToLoad.Add("uid");
LdapSearcher.PropertiesToLoad.Add("mail");
LdapSearcher.PropertiesToLoad.Add("employeeNumber");
LdapSearcher.PropertiesToLoad.Add("facsimileTelephoneNumber");
LdapSearcher.PropertiesToLoad.Add("foremfunction");
LdapSearcher.PropertiesToLoad.Add("foremservice");
LdapSearcher.PropertiesToLoad.Add("foremsite");
LdapSearcher.PropertiesToLoad.Add("inetUserStatut");
LdapSearcher.PropertiesToLoad.Add("telephoneNumber");
LdapSearcher.PropertiesToLoad.Add("uid");
LdapSearcher.PropertiesToLoad.Add("mail");
SearchResultCollection LdapSearcherResults = LdapSearcher.FindAll();
foreach (SearchResult resultLdap in LdapSearcherResults)
{
Console.WriteLine(resultLdap.Properties["cn"][ 0].ToString());
Console.WriteLine(resultLdap.Properties["uid"][0].ToString());
Console.WriteLine(resultLdap.Properties["mail"][0].ToString());
}
}
UPDATE2
System.NullReferenceException was unhandled
Message=Object reference not set to an instance of an object.
Source=System.DirectoryServices.AccountManagement
StackTrace:
at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)
at System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()
at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, ContextOptions options, String userName, String password)
at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name)
at MoulinetteUser.Program.Main(String[] args) in C:\Users\.....\Program.cs:line 18
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
你尝试与您的开发机LDAP工具连接字符串? –
请详细说明。你可以使用LDAP工具浏览吗?任何防火墙?等等...... – Reniuz
查看我的更新1 –