我在从 LDAP 过滤器中排除 OU 时遇到问题
$DaysAgo = (Get-Date).AddDays(-31)
$ft = $DaysAgo.ToFileTime()
Get-QADComputer -SizeLimit 0 -IncludeAllProperties
-SearchRoot 'DC=My,DC=Domain,DC=Local'
-LdapFilter "(&(objectcategory=computer)(lastLogonTimeStamp<=$ft)
(!(ou:dn:=DisabledPCs))(|(operatingsystem=Windows 2000 Professional)
(operatingSystem=Windows XP*)(operatingSystem=Windows 7*)
(operatingSystem=Windows Vista*)(operatingsystem=Windows 2000 Server)
(operatingsystem=Windows Server*)))"
我正在寻找所有未登录 AD 超过 31 天且尚未在 OU“DisabledPCs”中的 Windows 操作系统系统,我将把它们移到那里。
当我现在运行它时,我得到了我正在寻找的所有系统,包括那些在“DisabledPCs”OU 中的系统......我尝试了几种变体,包括:
(&(!(ou:dn:=DisabledPCs)))
以及将它放在过滤器中的不同位置(并不是我认为它会有所作为,但我显然不知道......)
提前感谢您的帮助,
-dboftlp
我发现使用 LDAP 过滤器最简单的方法是将它们分解为以下格式:(Apache DS 似乎会自动执行此操作,这真的很有帮助)。
所以我想也许,如果您将过滤器重新排序为:
我没有对此进行测试,但我认为制作 & 两部分,NOT,然后将其括起来,应该这样做。
让我知道那是否更接近。
就像来自 stackoverflow 上类似问题的仅供参考
“AD 不支持这种可扩展的匹配”
来源
我所做的基本上是在 powershellcommunity.org 海报cameronove的帮助下完全简化了脚本,以提出以下内容:
我简化了操作系统过滤器,帮助我避免使用其他非 Win 操作系统,并通过管道将 OU 排除在我的脚本中不包括我想将系统移动到后面的 OU。我在这里不包括那部分,因为我将它记录到带有 foreach 循环的 Excel 工作簿中,而且它比我原来的 Q?...
如果您有兴趣查看整个脚本,请随时
在 twitter 上联系我@dboftlp
或通过 gmail dot com 上的 dboftlp