如何用PowerShell从多个AD OU中筛选特定子OU并获取用户列表
解决思路:批量提取多OU下的Platform子OU用户列表
嘿,你这个需求完全不用写一大堆重复命令或者复杂脚本,有几个高效的方法能帮你自动搞定,下面给你拆解一下:
方法1:先定位所有Platform OU,再遍历提取用户
这是最稳妥的方式——先把所有名为Platform的OU找出来,再挨个去这些OU里拉用户列表,完全不用手动指定每个父OU的路径:
# 第一步:搜索根域下所有名为Platform的OU(SearchScope设为Subtree会递归找所有层级) $platformOUs = Get-ADOrganizationalUnit -Filter {Name -eq "Platform"} -SearchBase "DC=RootDomain,DC=com" -SearchScope Subtree # 第二步:遍历每个找到的Platform OU,提取用户 foreach ($ou in $platformOUs) { # 直接用OU的DistinguishedName作为SearchBase,精准定位 Get-ADUser -SearchBase $ou.DistinguishedName -Filter * }
如果你的环境包含子域(比如ChildDomain.RootDomain.com),可以扩展成跨域查询:
# 获取森林里的所有域 $allDomains = (Get-ADForest).Domains foreach ($domain in $allDomains) { # 针对每个域搜索Platform OU $platformOUs = Get-ADOrganizationalUnit -Filter {Name -eq "Platform"} -Server $domain -SearchScope Subtree foreach ($ou in $platformOUs) { Get-ADUser -SearchBase $ou.DistinguishedName -Server $domain -Filter * } }
这个方法的优势是精准可控,不会误匹配其他带Platform字样的OU,而且能自动覆盖所有符合条件的层级。
方法2:用LDAP过滤器直接匹配用户路径
如果你想一步到位,也可以通过LDAP过滤器直接筛选出父OU包含Platform的用户,但要注意这个方法可能会匹配到Platform OU的子OU里的用户(如果不需要的话得调整规则):
Get-ADUser -Filter * -SearchBase "DC=RootDomain,DC=com" -SearchScope Subtree -LDAPFilter "(distinguishedName=*,OU=Platform,*DC=RootDomain,DC=com)"
解释一下这个过滤器:它会匹配所有DN里包含OU=Platform,且属于RootDomain.com的用户,不管Platform OU在哪个父层级下面。如果只想匹配直接在Platform OU下的用户,可以把过滤器改成:
-LDAPFilter "(distinguishedName=CN=*,OU=Platform,*)"
不过这种方法的容错性稍差,比如如果用户的DN结构有特殊情况(比如包含逗号)可能会出问题,所以还是方法1更推荐。
小提示
- 如果需要导出结果到CSV,可以在
Get-ADUser后面加| Export-Csv -Path "C:\PlatformUsers.csv" -NoTypeInformation -Append(用Append避免覆盖跨域查询的结果) - 可以给
Get-ADUser加-Properties参数提取更多用户属性,比如EmailAddress、LastLogonDate等
内容的提问来源于stack exchange,提问作者rzantarra
相关产品推荐
相关产品推荐

