我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,
首先,计算机默认每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删除任何你想要的东西,所以要谨慎行事。