C# 查询AD以获取LAPS ExpirationTime时返回的System.\uu ComObject
我正在使用以下代码获取特定计算机的LAPS密码和过期日期:C# 查询AD以获取LAPS ExpirationTime时返回的System.\uu ComObject,c#,active-directory,C#,Active Directory,我正在使用以下代码获取特定计算机的LAPS密码和过期日期: string computerHostName = "hostname"; string domainController = "domain.lan"; DirectoryContext dirCtx = new DirectoryContext(DirectoryContextType.Domain, domainController); using (Domain compsDomain
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密码]
系统。共对象
我试着在网上搜索,已经看到了,但我仍然无法让它工作。如何让脚本正常输出过期时间
非常感谢您的帮助:)Hans Passant让我访问此链接: 而不是使用:
Console.WriteLine(searchResult.GetDirectoryEntry().Properties["ms-Mcs-AdmPwdExpirationTime"].Value);
我应该使用:
Console.WriteLine((long)searchResult.Properties["ms-Mcs-AdmPwdExpirationTime"][0]);
正确输出:
132068789141660751
@谢谢你的链接,我从来没有找到过。。哎呀。我添加了它作为对此的回答:)原因是
DirectoryEntry.Properties
将值作为返回,您必须使用中的ConvertADSLargeIntegerToInt64
方法读取该值SearchResult.Properties
将值表示为long
,您只需将其传递到DateTime.FromFileTimeUtc
。我不知道为什么会有这种差异。在这种情况下,您无论如何都应该从搜索结果
中读取,因为您已经要求在结果中输入值(使用属性加载
)。使用searchResult.GetDirectoryEntry().Properties
实际上会返回AD并读取对象中的每个属性,这是不必要的。