redirusr 和 redircmp — Active Directory 默认容器重定向
Active Directory(AD)新建用户和计算机时,默认存放在 CN=Users 和 CN=Computers 容器中。这两个是容器(Container)而非组织单元(OU),无法直接应用组策略(GPO)。在生产环境中,通常需要将默认位置指向自定义 OU,以便统一管理策略和权限。
Windows Server 提供了 redirusr.exe 和 redircmp.exe 两个内置工具来完成这一操作。
为什么需要重定向
| 对比 | Users / Computers 容器 | 自定义 OU |
|---|---|---|
| 类型 | Container(容器) | OU(组织单元) |
| GPO 链接 | ❌ 不支持 | ✅ 支持 |
| 委派控制 | ❌ 不支持 | ✅ 支持 |
| 典型用途 | AD 内置账户、域控制器 | 按部门/角色组织管理对象 |
新建用户时如果忘记选择目标 OU,对象就会落入默认容器,导致策略未生效。重定向可以从根本上避免这个问题。
原理:wellKnownObjects 属性
重定向的本质是修改域根对象的 wellKnownObjects 属性。AD 通过该属性记录几个知名容器的 DN:
CN=Users→ 新建用户默认位置CN=Computers→ 新计算机加入域时的默认位置
redirusr 和 redircmp 只是修改这个属性的便捷工具,效果等同于用 ADSI Edit 或 LDP 手动修改。
使用方法
两个工具位于域控制器上的 %SystemRoot%\System32 目录下,语法完全一致。
redirusr — 重定向用户默认容器
redirusr "OU=Staff,DC=example,DC=com"
执行后,所有新建用户将默认放入 OU=Staff,DC=example,DC=com。
redircmp — 重定向计算机默认容器
redircmp "OU=Workstations,DC=example,DC=com"
执行后,新计算机加入域时将默认放入 OU=Workstations,DC=example,DC=com。
验证
通过 ADSI Edit 查看:
- 打开 ADSI Edit → 连接到默认命名上下文
- 右键点击域根节点(如
DC=example,DC=com)→ 属性 - 找到
wellKnownObjects属性 - 确认
CN=Users和CN=Computers对应的 DN 已更新
也可以用 PowerShell 快速查看:
Get-ADDomain | Select-Object UsersContainer, ComputersContainer
重定向后此命令会返回新的 OU 路径。
完整示例
假设域名为 corp.example.com,计划结构如下:
DC=corp,DC=example,DC=com
├── OU=Accounts ← 用户默认位置
│ ├── OU=Admins
│ └── OU=Employees
├── OU=Workstations ← 计算机默认位置
│ ├── OU=Laptops
│ └── OU=Desktops
├── OU=Servers
├── OU=Groups
├── CN=Users ← 原默认容器(保留,不可删除)
└── CN=Computers ← 原默认容器(保留,不可删除)
执行:
# 在域控制器上以域管理员身份运行
redirusr "OU=Accounts,DC=corp,DC=example,DC=com"
redircmp "OU=Workstations,DC=corp,DC=example,DC=com"
之后新建用户 john,会自动出现在 OU=Accounts 下而非 CN=Users。
注意事项
1. 不可逆
重定向是单向操作,微软不提供撤销命令。如需回退,只能通过 ADSI Edit 手动将 wellKnownObjects 中的 DN 改回 CN=Users / CN=Computers。
2. 原容器仍存在
CN=Users 和 CN=Computers 容器不会被删除,其中的现有对象也不受影响。已有用户/计算机停留在原位,只有后续新建的对象才会进入新 OU。
如需将已有对象迁移到新 OU:
# 批量移动 CN=Users 下的用户到新 OU
Get-ADUser -Filter * -SearchBase "CN=Users,DC=corp,DC=example,DC=com" |
Move-ADObject -TargetPath "OU=Accounts,DC=corp,DC=example,DC=com"
# 批量移动 CN=Computers 下的计算机到新 OU
Get-ADComputer -Filter * -SearchBase "CN=Computers,DC=corp,DC=example,DC=com" |
Move-ADObject -TargetPath "OU=Workstations,DC=corp,DC=example,DC=com"
3. 目标 OU 必须已存在
执行前确保目标 OU 已创建,否则会报错:
# 预先创建 OU
New-ADOrganizationalUnit -Name "Accounts" -Path "DC=corp,DC=example,DC=com"
New-ADOrganizationalUnit -Name "Workstations" -Path "DC=corp,DC=example,DC=com"
4. 不影响手动指定 OU
通过 ADUC、New-ADUser、New-ADComputer 等工具手动指定了目标 OU 的操作不受影响。重定向只改变不指定位置时的默认行为。
5. 需要域管理员权限
执行 redirusr 和 redircmp 需要域管理员(Domain Admins)权限。
与其他方法的对比
| 方法 | 优点 | 缺点 |
|---|---|---|
| redirusr / redircmp | 简单一行命令,微软官方工具 | 不可逆,需手动迁移已有对象 |
| ADSI Edit 修改 wellKnownObjects | 更灵活,可回退 | 操作复杂,容易出错 |
| 脚本创建时指定 OU | 完全可控 | 无法防止 ADUC 图形界面忘记选择 |
| Powershell 策略审计 | 可检测遗漏 | 需要额外部署,非根本解决 |
对于大多数场景,redirusr + redircmp 是最简单直接的方案。
最佳实践
- 建域时就执行:在新建域之后、创建大量用户之前完成重定向
- 预先创建好 OU 结构:规划好组织架构后再执行
- 立即迁移已有对象:避免部分对象在新 OU、部分在旧容器造成混乱
- 记录变更:在运维文档中记录重定向操作,方便后续排查
- 验证 GPO 生效:重定向后创建测试用户/计算机,确认链接到 OU 的 GPO 正常应用