这很好用:
Dim ADEntry = New DirectoryEntry(ldapPath + userName, au, ap)
Dim Name = ADEntry.Properties("FullName").Value.ToString()
Return Name
但这不是:
Dim ADEntry = New DirectoryEntry(ldapPath + userName, au, ap)
Dim firstName = ADEntry.Properties("givenName").Value.ToString()
Dim lastName = ADEntry.Properties("sn").Value.ToString()
Return firstName + " " + lastName
我还尝试使用ADEntry.Properties(“givenName”)(0).Value.ToString(),因为我读到了它们可能被编入索引的地方。我得到了相同的结果,“对象引用没有设置为对象的实例”。
答案 0 :(得分:2)
这些确实都是索引属性,而你访问它们的方式对我来说很好。
尽管如此,在尝试阅读之前,您应该检查以确保实际存在与此属性相关联的值 - 您可以使用简单的.Contains
检查:
If ADEntry.Properties.Contains("givenName") Then
如果评估结果为false
,您就会知道没有值可读,因此您可以避免收到的对象引用错误。
此外,您可能希望使用DirectorySearcher
预加载您感兴趣的属性,而不是直接转到DirectoryEntry
。我是C#的人,但在我开发LDAP组件时,这个页面非常有用:
通过DirectorySearch
和SearchResult
检索属性(C#)http://www.ianatkinson.net/computing/adcsharp.htm
答案 1 :(得分:0)
我遇到了同样的问题。
我知道这并不能解决您的问题,但要获得名字和姓氏,我必须使用以下代码:
System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent();
string[] a = Context.User.Identity.Name.Split('\\');
System.DirectoryServices.DirectoryEntry ADEntry = new System.DirectoryServices.DirectoryEntry("WinNT://" + a[0] + "/" + a[1]);
string FullName = ADEntry.Properties["FullName"].Value.ToString();
string FirstName = FullName.Substring(FullName.IndexOf(",") + 2);
string Lastname = FullName.Substring(0, FullName.IndexOf(","));
以防万一可能对其他人有帮助