c# - 向 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
我已经尝试在网上查找并且已经看到了这个问题和这个问题,但我仍然无法让它工作。如何让脚本正常输出过期时间?
任何帮助表示赞赏:)
解决方案
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
推荐阅读
- python-3.x - 抓取网站时陷入循环/错误的 Xpath
- javascript - 访问操作系统格式
- javascript - Konva - 选择和保存形状
- pdf - Ghostscript将ps和pdf文件合并为pdf
- google-sheets-api - 谷歌表格 API 超时
- python - 当 OpenCV 检测到正图像时,处理花费了可笑的时间
- ios - 无法在 SwiftUI 中使用 PencilKit 在背景图像上绘图
- python - 如何使用 Python 在 SQL 查询中使用变量
- python-3.x - 在 python 中记录可用性
- java - 从填充的 ArrayList<> 获取对象的 getFolderSize() 错误