2011-10-31 90 views
1

我正在使用System.DirectoryServices库来查询LDAP目录。我看到所有文本属性都很好,但我需要检索一些操作属性,如pwdChangedTime。尝试获取这些属性时,我得到的对象未设置为对象的类型错误实例。LDAP查询操作属性

using (DirectorySearcher search = new DirectorySearcher(dirCon, 
        ldapSearchFilter.Replace("{cn}", cn), 
        new string[] {"*","+"}, 
        SearchScope.Subtree)) 
{ 
    foreach (SearchResult sr in search.FindAll()) 
    { 
     la = new LdapAccount(); 
     la.pswdUpdateTime = DateTime.ParseExact(sr.GetDirectoryEntry().Properties["pwdchangedtime"].ToString(), dateFormat, null); 
... 
} 

我看到所有的文本属性,但它不会找到任何操作属性。

+0

@marc_s LDAP实际上是相当* unpicky *的情况下,特别是在属性名称。 – EJP

回答

1

在本地进行一些测试我在SearchResult上看到属性pwdlastset,所以我不知道属性名称是否与您期望的不同。

result.Properties["pwdlastset"] 

SearchResult属性集合上还有一个PropertyNames集合可能很有用。另外,当我在没有调用GetDirectoryEntry()之前询问AD时,只是直接从SearchResult枚举了属性。

+0

感谢您的回复,令人困惑的是,当我查看PropertyNames集合(以及底层哈希表)时,我看到“pwdchangedtime”条目,并且它具有正确的dateTime值。我不知道为什么我不能从集合中提取这个... – cobolstinks

+0

这很有趣。所以'sr.GetDirectoryEntry()。属性[“pwdchangedtime”]。ToString()'是抛出异常的那块?或者是其他一些线路。我会认为,如果你可以得到一个对DirectoryEntry的引用,并查看Visual Studio中的基础属性,你应该可以在代码中做同样的事情...... – csm8118

+0

正确我在那里得到一个空指针。它很奇怪。我会理解空指针,如果属性不回来,但它是... – cobolstinks