Get-ADUser查询中排除特定OU无效,如何配置正确筛选逻辑?
解决AD账户筛选中排除特定OU的问题
嘿,我知道你现在卡在排除Resource Accounts OU这一步了——别着急,这种问题大多是因为没正确匹配AD账户的DistinguishedName属性,或者对LDAP路径的匹配逻辑没捋对。我给你调整下脚本,保证排除规则能生效:
修正后的完整脚本
# 筛选已禁用且365天未登录的AD账户,排除Resource Accounts OU内的所有账户 Get-ADUser -Filter {Enabled -eq $false -and LastLogonDate -lt (Get-Date).AddDays(-365)} ` -Properties LastLogonDate, DistinguishedName | Where-Object { $_.DistinguishedName -notlike "*OU=Resource Accounts,*" } | Select-Object Name, SamAccountName, LastLogonDate, DistinguishedName
核心调整说明
- 逻辑顺序更高效:先用
Get-ADUser的内置Filter把已禁用、久未登录的账户先筛出来,减少后续处理的数据量,再用Where-Object做OU排除——这个顺序本身没问题,之前失效大概率不是位置的锅。 - 精准匹配OU路径:AD账户的
DistinguishedName是完整的LDAP路径,用-notlike "*OU=Resource Accounts,*"能覆盖这个OU以及它的所有子OU里的账户。如果只想排除这个OU的直接账户(不包含子OU),可以改成精确匹配:
记得把Where-Object { $_.DistinguishedName -notmatch "OU=Resource Accounts,DC=yourdomain,DC=com$" }DC=yourdomain,DC=com换成你实际的域后缀,$表示匹配字符串结尾,确保只排除该OU下的直接账户。 - 检查OU名称准确性:先确认下OU的名称有没有拼写错误,比如空格、大小写(AD匹配不区分大小写,但最好和实际一致),别因为打错字白忙活。
快速排查小技巧
要是还是不生效,先把所有符合条件的账户的完整路径打出来看看:
Get-ADUser -Filter {Enabled -eq $false -and LastLogonDate -lt (Get-Date).AddDays(-365)} ` -Properties DistinguishedName | Select-Object DistinguishedName
对比下这些路径和你的排除表达式,就能很快找到问题所在了。
内容的提问来源于stack exchange,提问作者Darrian Sheffield
相关产品推荐
相关产品推荐

