为什么我从LDAP属性获取'System .__ ComObject'?

时间:2009-01-13 22:31:54

标签: active-directory ldap

我将是第一个承认这是切入和过去编程的人。我以前从未看过AD,真的不明白。我想那是我的下一个研究......

无论如何,这是一些测试代码,它应该显示有效期 - 无论是可读的还是刻度的 - 都无关紧要。 (这是一个Web表单,它在dev webserver上运行。)

我得到的是:“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 );

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:0)

用这个你可以获得真正的价值

Microsoft.VisualBasic.Information.TypeName(item);