首页 > 解决方案 > 向 AD 查询 LAPS ExpirationTime 时返回 System.__ComObject

问题描述

我正在使用以下代码获取特定计算机的 LAPS 密码和到期日期:

string computerHostName = "hostname";
string domainController = "domain.lan";

DirectoryContext dirCtx = new DirectoryContext(DirectoryContextType.Domain, domainController);
using (Domain compsDomain = Domain.GetDomain(dirCtx))
using (DirectorySearcher adSearcher = new DirectorySearcher(compsDomain.GetDirectoryEntry()))
{
    //this is the search criteria for the domain query
    adSearcher.Filter = "(&(objectClass=computer) (cn=" + computerHostName + "))";
    adSearcher.SearchScope = SearchScope.Subtree;
    adSearcher.PropertiesToLoad.Add("ms-Mcs-AdmPwd");
    adSearcher.PropertiesToLoad.Add("ms-Mcs-AdmPwdExpirationTime");
    SearchResult searchResult = adSearcher.FindOne();
    
    //Get the LAPS password
    Console.WriteLine(searchResult.GetDirectoryEntry().Properties["ms-Mcs-AdmPwd"].Value);
    //Should get the LAPS password expiration time
    Console.WriteLine(searchResult.GetDirectoryEntry().Properties["ms-Mcs-AdmPwdExpirationTime"].Value);
}
Console.ReadLine();

但是,输出如下所示:

[此处为LAPS密码]

System.__ComObject

我已经尝试在网上查找并且已经看到了这个问题这个问题,但我仍然无法让它工作。如何让脚本正常输出过期时间?

任何帮助表示赞赏:)

标签: c#active-directory

解决方案


Hans Passant 向我推荐了这个链接:How to convert Active Directory pwdLastSet to Date/Time

而不是使用:

Console.WriteLine(searchResult.GetDirectoryEntry().Properties["ms-Mcs-AdmPwdExpirationTime"].Value);

我应该改用:

Console.WriteLine((long)searchResult.Properties["ms-Mcs-AdmPwdExpirationTime"][0]);

正确输出:

132068789141660751


推荐阅读