DSQuery来查找在过去26周内连接到域的运行Windows XP的系统

我试图写一个单一的dsquery,告诉我在过去的26个星期内,哪些系统已经连接到我们的域名,正在运行XP,所以我们可以找出我们需要在未来两个月内逐步淘汰。

我目前面临的问题是,当我做一个dsquery来查找运行Windows XP的系统时,会返回一个系统列表,其中一些我不知道是不是主动的,需要作为AD对象删除(这是另一个问题,请让我最好的做法/安全讲座…一次一件事)。

我使用下面的查询来查找运行Windows XP的系统并将其输出到文本文件中:

dsquery * domainroot -filter "(&(objectCategory=computer)(operatingSystem=Windows XP*))" -limit 1000 > c:\XP_Machines.txt 

我想添加到这个查询,这将告诉我在上面的输出中的哪些系统在过去的26周内已经连接到networking。

我知道在过去的26个星期里,我可以find没有连接的系统:

 dsquery computer -inactive 26 

但是,我不确定如何在过去的26周内find运行Windows XP系统输出的子系统。

提前感谢你的帮助。

注意:如果有更好的方法使用PowerShell来做到这一点,我也可以这么做。

将lastLogonTimestamp属性添加到您的filter中,并在六个月前获取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() 

http://blogs.technet.com/b/ashleymcglone/archive/2013/12/20/back-to-the-future-working-with-date-data-types-in-active-directory-powershell.aspx