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

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

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

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

我是否误解了该命令的作用?

答案1

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

1)这是非常松散,即远非实时。此属性不会在每次计算机登录域时更新,即使更新,也不会立即复制到其他域控制器。

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

-stalepwd开关还可以帮助您识别不活动的计算机帐户。计算机帐户应该每 30 天自动更新密码。但请注意,它使用 pwdLastSet LDAP 属性,该属性也可以为空。pwdLastSet 是一个烦人的文件时间,但 .Net/Powershell 可轻松将其转换为人性化的日期:

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 为空的帐户将位于底部。

(当然,您可以在计算机上禁用密码更改,但这种做法相对较少见。)

这些帐户具有空值,通常意味着他们从未登录过域和/或从未更改过密码。我确信可能还有其他一些奇怪的用例也会出现这种情况,例如管理员预置计算机帐户但随后决定永远不将计算机加入域、来自同一林的其他子域的计算机帐户等。您只需调查这些情况即可。

如果您想阅读,这里有一些来自 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

答案2

首先,计算机默认每 30 天更改一次密码,尽管这是可以更改的。寻找任何少于 30 天不活动的计算机都是自找麻烦,不要忘记 VPN 用户或其他人,他们可能每 6-12 个月才在办公室连接到域一次。

也就是说,您可能需要指定计算机所在的 ou,或者 forestroot 或 domainroot:

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 还提供了删除任何您想要删除的内容的选项,因此如果您这样做,请谨慎操作。

相关内容