“dsquery computer -inactive x”忽略了非常老的明显不活动的计算机

我inheritance了一个包含数百个长期计算机帐户的AD环境。 我想开始清除它们。 如果我使用dsquery computer -inactive命令,它似乎忽略这些计算机,并且只返回在最近几个月/周内一直处于活动状态但在给定时间段内未激活的计算机。

例如,如果我运行dsquery computer -inactive 4我得到一台计算机。 如果我运行dsquery computer -inactive 3我得到大约五个。 如果我运行dsquery computer -inactive 1我会得到一个大的列表。 这些清单都没有显示非常旧的电脑帐户。

我误解了这个命令应该做什么?

dsquery computer -inactive x使用LastLogonTimeStamp属性来决定计算机是否处于非活动状态。 LastLogonTimeStamp的两个特性是:

1)它非常松散,即远不及实时。 每次计算机login到域时,此属性都不会更新,甚至在更新时也不会立即将其复制到其他域控制器。

2)它可以为空,在这种情况下,dsquery很可能会忽略它。

-stalepwd开关也可以帮助您识别不活动的计算机帐户。 计算机帐户应该每30天自动更新一次密码。 但要小心,它使用pwdLastSet LDAP属性,也可以为null。 pwdLastSet是一个烦人的文件时间,但.Net / Powershell很容易将其转换为人性化的date:

 PS C:\Users\ryan> Get-ADComputer -Filter * -Properties PasswordLastSet,LastLogonTimeStamp | ? { $_.PasswordLastSet -LT $(Get-Date).AddDays(-180) } | Select Name,PasswordLastSet,LastLogonTimeStamp | Sort-Object PasswordLastSet -Descending 

上面的PowerShell的行会给你所有的pwdLastSet属性(Powershell将其转换成人类可读的PasswordLastSet)的计算机帐户超过180天,最新的帐户将位于顶部。 最旧的账户和那些pwdLastSets为空的账户将位于底部。

(当然,你可以禁用计算机上的密码更改,但是这是一个相对难得的事情。

这些帐户具有空值,通常意味着他们从未login到域和/或从未更改过密码。 我敢肯定,在这种情况下可能会出现其他一些奇怪的用例,例如pipe理员预先安装一个计算机帐户,但是决定永远不会实际将计算机join到域中,来自同一个森林的其他子域的计算机帐户等你只需要调查这些。

如果你想读一下AskDS的LastLogonTimeStamp,

http://blogs.technet.com/b/askds/archive/2009/04/15/the-lastlogontimestamp-attribute-what-it-was-designed-for-and-how-it-works.aspx

首先,计算机默认每30天更换一次密码,但可以更改密码。 寻找闲置时间less于30天的计算机只是在寻求麻烦,不要忘记VPN用户或其他可能连接到域名的人员,他们恰好在办公室时每6-12个月一次。

也就是说,您可能需要指定计算机所在的位置,或者是林地根目录或根域根目录:

 dsquery computer forestroot -inactive 4 dsquery computer domainroot -inactive 4 dsquery computer ou=Foo,dc=bar,dc=baz,dc=com -inactive 4 

我的个人喜好是免费的joeware工具“oldcmp”:

 oldcmp -age [days] -report 

oldcmp也可以select删除任何你想要的东西,所以要谨慎行事。