我GOOGLE了如何列出locking的帐户,并find两种方法到目前为止,这两个都不工作…
保存的查询 – (&(&(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))))
列出许多账户,其中许多账户没有被locking。 如果我解锁了一个我碰巧知道被locking的东西,它仍然会被查询返回。
Powershell命令 – Search-ADAccount -LockedOut
什么也没做。
所以要么 – 我做错了什么? 或者 – 有没有一种方法可以实际工作?
我不一定会信任Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut ,因为它不会为我返回可靠的结果,但是,现在也无法直接联系我的PDCe。 为了获得最佳效果,您需要直接定位PDC模拟器,因为它始终具有关于整个域中的帐户locking的最新信息。
这就是我所投资的,你在这里目睹的是复制的延迟:
…紧急将帐户locking复制到主域控制器(PDC)模拟器angular色所有者,然后紧急复制到以下内容:
•与PDC模拟器位于同一站点的域中的域控制器。
•位于与处理帐户locking的域控制器位于同一站点的同一个域中的域控制器。
•位于同一个域中的域控制器,这些域控制器位于已configuration为允许站点(包括PDC模拟器的站点或处理帐户locking的站点)之间更改站点间通知(以及紧急复制)的站点中。 这些站点包括与包含PDC模拟器的站点在同一站点链接中包含的任何站点,或包含与包含处理帐户locking的域控制器的站点在同一站点链接中的站点。
另外,如果身份validation在PDC模拟器以外的域控制器上失败,则将在PDC模拟器上重新进行身份validation。 由于这个原因,PDC模拟器locking在处理失败密码尝试的域控制器之前的帐户,如果达到了bad-password-attempt阈值。 有关PDC模拟器angular色所有者如何pipe理密码更改和帐户locking的详细信息,请参阅本书中的“pipe理灵活的单主机操作”。
所以试试Search-ADAccount -LockedOut -Server DC-PDCE ,看看你的结果是否更好。
另外,在构build关于lockoutTime属性的查询时,还需要考虑其他事情:
该属性值仅在帐户login成功时才会重置。 这意味着这个值可能不是零,但帐户没有被locking。 要准确确定帐户是否被locking,您必须将Lockout-Duration添加到此时间,并将结果与当前时间进行比较,以计算当地时区和夏令时。
编辑:通过反向工程Microsoft.ActiveDirectory.Management.dll ,我可以告诉你, Search-ADAccount -LockedOut ,这似乎对我来说产生相当可靠的结果,运行以下代码:
else if ((bool) this._paramSet.LockedOut) { list.Add(ADAccountFactory<ADAccount>.AttributeTable[cmdletSessionInfo.ConnectedADServerType]["AccountLockoutTime"].InvokeToSearcherConverter(ADOPathUtil.CreateFilterClause(ADOperator.Ge, "AccountLockoutTime", (object) 1), cmdletSessionInfo)); this.OutputFilterFunction = new ADGetCmdletBase<SearchADAccountParameterSet, ADAccountFactory<ADAccount>, ADAccount>.OutputFilterDelegate(this.FilterIsLockedOut); } if (list.Count > 0) this.OutputSearchResults(list.Count != 1 ? ADOPathUtil.CreateAndClause(list.ToArray()) : list[0]); else this.OutputSearchResults((IADOPathNode) null);
所以看起来Search-ADAccount -LockedOut查看AccountLockoutTime属性!
编辑一些更大的正义:理查德·穆勒,迪尔。 服务MVP,这样说:
您不能使用userAccountControl属性来识别被locking的用户。 有一些userAccountControl为此logging,但它不被使用。
我可以这样validation:
PS C:\Users\ryan> $(Search-ADAccount -LockedOut).Count 11 PS C:\Users\ryan> $(Get-ADUser -LDAPFilter "(&(objectCategory=User)(userAccountControl:1.2.840.113556.1.4.803:=16))").Count 0
最后,我想结束这个话题的博客文章 ,这解释了为什么lockoutTime>=1接近最佳解决scheme,但这只是故事的一部分。 您需要进一步过滤列表,以便仅包含locking时间大于$(您的域locking持续时间)分钟的用户。