You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell从Active Directory特定OU获取无ManagedBy的组列表

别担心,我来帮你一步步搞定这个需求!作为PowerShell和AD的新手,咱们从最准确高效的命令开始,再拆解每个部分帮你理解:

完整的解决方案命令

直接运行这条命令(记得替换成你的目标OU路径):

Get-ADGroup -Filter {ManagedBy -notlike "*"} -SearchBase "OU=你的目标OU名称,DC=域名,DC=com" | Select-Object -ExpandProperty Name

拆解每个参数的作用

  1. -SearchBase "OU=...":这个参数是关键!它告诉PowerShell只在你指定的OU(默认包含子OU,要是不想包含子OU可以加-SearchScope OneLevel)里查询组,不会遍历整个Active Directory,完美解决你之前“列出所有组”的问题。

    • 怎么获取这个OU的路径?打开AD用户和计算机(ADUC),找到目标OU→右键→属性→切换到「属性编辑器」标签→找到distinguishedName属性,复制它的值就行,比如OU=SalesGroups,DC=contoso,DC=com。
  2. -Filter {ManagedBy -notlike "*"}:这一步是在AD服务器端直接筛选出ManagedBy字段为空的组,比你之前想的先拉所有组再用Where-Object过滤高效太多——毕竟不用把无关的组都下载到本地再处理,尤其AD里组多的时候差异很明显。

    • 也可以用-Filter 'ManagedBy -eq $null',不过有时候AD里空属性的存储方式用-notlike "*"更稳妥,两种都能试试。
  3. Select-Object -ExpandProperty Name:最后只提取组的名称,输出纯文本列表,完全符合你“仅需这类组的名称”的要求。如果想保留对象格式但只显示Name列,去掉-ExpandProperty就行。

纠正你之前的小问题

  • 你写的Get-ADGroup -Filter 'Names "*"'有语法错误,正确的属性名是Name(单数),而且这个Filter其实是匹配所有名称不为空的组,再加上没指定-SearchBase,所以会列出所有组。
  • 关于Get-ADGroups | Where-Object {$_.ManagedBy -eq $null}:首先命令名是Get-ADGroup(单数),其次没加-SearchBase会拉全AD的组,效率低,不如直接在-Filter里处理。

可选:把OU存到变量里复用

你之前考虑的把特定OU赋值给变量是完全可行的,比如:

# 先把目标OU路径存到变量里
$targetOU = "OU=你的目标OU名称,DC=域名,DC=com"
# 再用变量查询
Get-ADGroup -Filter {ManagedBy -notlike "*"} -SearchBase $targetOU | Select-Object Name

最后提醒下:如果你的机器还没装AD PowerShell模块,需要先安装——在Windows 10/11里可以通过「设置→应用→可选功能→添加功能」找到「RSAT: Active Directory Domain Services and Lightweight Directory Tools」安装;服务器上可以用Install-WindowsFeature RSAT-AD-PowerShell命令安装。

内容的提问来源于stack exchange,提问作者John Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:19:16