【问题标题】:Why am I getting 'System.__ComObject' from my LDAP property?为什么我从我的 LDAP 属性中获取“System.__ComObject”?
【发布时间】:2009-01-13 22:31:53
【问题描述】:

我会第一个承认这是过时的编程。我以前从未看过AD,真的不明白。我想那是我的下一个研究......

无论如何,这是一些测试代码,它应该显示到期日期——无论是可读的,还是刻度的——没关系。 (这是一个 Web 表单,在开发网络服务器上运行。)

我得到的是:“System.__ComObject”

DirectorySearcher searcher = new DirectorySearcher();
searcher.Filter = String.Format( "(SAMAccountName={0})", "TestA33" );
searcher.PropertiesToLoad.Add( "cn" );

SearchResult result = searcher.FindOne();
DirectoryEntry uEntry = result.GetDirectoryEntry();

String expiry = uEntry.Properties["accountExpires"].Value.ToString(); 

Response.Write( expiry );

【问题讨论】:

    标签: active-directory ldap


    【解决方案1】:

    Dave Cluderay 推荐的文章是个好主意。需要注意的重要一点是,如果将过期时间设置为从不,那么您获得的日期可能没有意义。

    根据 MS 文档,来自 ADSI 调用的 IADsLargeInteger 表示自 1601 年 1 月 1 日 (UTC) 以来的 100 纳秒间隔数,并且“值为 0 或 0x7FFFFFFFFFFFFFFF (9223372036854775807) 表示帐户永不过期”。

    【讨论】:

      【解决方案2】:

      这是因为属性值是使用 ADSI IADsLargeInteger COM 接口表示的,需要转换为 .NET 日期。 虽然我还没有尝试过,但是有一个示例显示了这里的方法: http://www.simple-talk.com/dotnet/.net-framework/building-active-directory-wrappers-in-.net/

      【讨论】:

      • 这很有意义。我明天早上试一试,然后接受答案。
      【解决方案3】:

      这样你就可以得到真正的价值

      Microsoft.VisualBasic.Information.TypeName(item);
      

      【讨论】:

      • TypeName 只给出名称,不给出值,在本例中为__ComObject
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 2023-03-18
      相关资源
      最近更新 更多