Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询AD以获取LAPS ExpirationTime时返回的System.\uu ComObject_C#_Active Directory - Fatal编程技术网

C# 查询AD以获取LAPS ExpirationTime时返回的System.\uu ComObject

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

我正在使用以下代码获取特定计算机的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密码]

系统。共对象

我试着在网上搜索,已经看到了,但我仍然无法让它工作。如何让脚本正常输出过期时间


非常感谢您的帮助:)

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并读取对象中的每个属性,这是不必要的。