【问题标题】:LDAP query operational attributesLDAP 查询操作属性
【发布时间】:2011-11-01 04:28:51
【问题描述】:

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

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);
...
}

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

【问题讨论】:

  • @marc_s LDAP 实际上对大小写比较不挑剔,尤其是在属性名称方面。

标签: c# active-directory ldap


【解决方案1】:

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

result.Properties["pwdlastset"]

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

【讨论】:

  • 感谢您的回复,令人困惑的是,当我查看 PropertyNames 集合(和底层哈希表)时,我看到一个“pwdchangedtime”条目,其中包含正确的 dateTime 值。我不知道为什么我不能从集合中提取这个......
  • 这很有趣。那么sr.GetDirectoryEntry().Properties["pwdchangedtime"].ToString() 是抛出异常的部分吗?还是其他线路。我认为,如果您可以获得对 DirectoryEntry 的引用并在 Visual Studio 中查看底层属性,那么您应该能够在代码中执行相同的操作...
  • 正确我在那里得到一个空指针。它很奇怪。如果属性没有回来,我会理解空指针,但它是......
  • 抱歉,我不确定接下来会发生什么。当我使用 .ToString() 运行那段代码时,我得到“System.DirectoryServices.PropertyValueCollection”
  • 与一些同事交谈,他们向我指出了这种有效的语法:DateTime test=(DateTime)sr.Properties["pwdchangedtime"][0];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多