我正在尝试编写一个 dsquery,它将告诉我过去 26 周内哪些运行 XP 的系统连接到了我们的域,以便我们能够确定在接下来的两个月内需要逐步淘汰哪些系统。
我目前面临的问题是,当我执行 dsquery 来查找运行 Windows XP 的系统时,它会返回一个系统列表,其中我知道有许多系统不活跃,需要作为 AD 对象删除(这是另一个问题,请不要给我讲最佳实践/安全讲座...一次一件事)。
我使用以下查询来查找运行 Windows XP 的系统并将其输出到文本文件:
dsquery * domainroot -filter "(&(objectCategory=computer)(operatingSystem=Windows XP*))" -limit 1000 > c:\XP_Machines.txt
我想添加该查询,它将告诉我上面输出中的哪些系统在过去 26 周内已连接到网络。
我知道要找到过去 26 周内未连接的系统,我可以运行:
dsquery computer -inactive 26
但是,我不确定如何找到过去 26 周内哪些系统作为运行 Windows XP 的系统输出的子集而处于活动状态。
提前感谢你的帮助。
笔记:如果有更好的方法可以使用 PowerShell 来实现此目的,我也愿意接受。
答案1
将 lastLogonTimestamp 属性添加到过滤器,并获取六个月前的 lastLogonTimestamp 数值。示例:
dsquery * domainRoot -filter "(&(objectCategory=computer)(operatingSystem=Windows XP*)(lastLogonTimestamp<=130200503900000000))" -limit 1000
130200503900000000 是 2013-08-03 20:39:50 的值
在 PowerShell 中,您可以按如下方式获取数字文件时间:
[datetime]::Now.AddDays(-180).ToFileTime()