如何批量将AD组从子OU移至上级OU并删除该子OU?
批量迁移子OU中AD组至上级OU的实现方案
以下是两种常用的批量处理方法,适用于将指定子OU内的所有AD组迁移到上级OU,为后续删除子OU做准备:
PowerShell 方案(推荐)
1. 获取子OU内的所有AD组
首先定义目标子OU的LDAP路径,然后查询该OU下的所有组:
# 替换为你的子OU LDAP路径 $sourceOU = "OU=Daughter,OU=Mother,DC=test,DC=fabrikam,DC=com" # 仅获取当前OU内的组(不包含子OU),如需包含子OU将-SearchScope改为Subtree $groups = Get-ADGroup -Filter * -SearchBase $sourceOU -SearchScope OneLevel
2. 批量迁移至上级OU
可以手动指定上级OU路径,或通过字符串处理自动提取上级OU:
# 自动提取上级OU路径(移除开头的子OU段) $targetOU = $sourceOU -replace "^OU=[^,]+,", "" # 遍历并移动每个组 foreach ($group in $groups) { Move-ADObject -Identity $group.DistinguishedName -TargetPath $targetOU Write-Host "已完成组迁移: $($group.Name)" }
命令行工具方案(适用于无PowerShell环境)
1. 导出子OU内的组列表
使用dsquery查询所有组并保存到文本文件:
dsquery group "OU=Daughter,OU=Mother,DC=test,DC=fabrikam,DC=com" -limit 0 > groups.txt
-limit 0表示返回全部结果,无数量限制。
2. 批量执行迁移
通过for循环读取列表,用dsmove完成迁移:
# 直接在命令行执行 for /f "delims=" %g in (groups.txt) do dsmove "%g" -newparent "OU=Mother,DC=test,DC=fabrikam,DC=com" # 若在批处理文件中执行,需将%g替换为%%g for /f "delims=" %%g in (groups.txt) do dsmove "%%g" -newparent "OU=Mother,DC=test,DC=fabrikam,DC=com"
注意事项
- 操作前务必验证结果:PowerShell可先执行
$groups | Select-Object Name, DistinguishedName查看组列表;命令行可打开groups.txt确认内容。 - 确保执行账号拥有AD对象移动权限及目标OU的写入权限。
- 迁移完成后,确认子OU内无剩余对象(组、用户、计算机等),再执行删除操作。
内容的提问来源于stack exchange,提问作者Florian Pichery
相关产品推荐
相关产品推荐

