redirusr 和 redircmp — Active Directory 默认容器重定向

Active Directory(AD)新建用户和计算机时,默认存放在 CN=UsersCN=Computers 容器中。这两个是容器(Container)而非组织单元(OU),无法直接应用组策略(GPO)。在生产环境中,通常需要将默认位置指向自定义 OU,以便统一管理策略和权限。

Windows Server 提供了 redirusr.exeredircmp.exe 两个内置工具来完成这一操作。

为什么需要重定向

对比Users / Computers 容器自定义 OU
类型Container(容器)OU(组织单元)
GPO 链接❌ 不支持✅ 支持
委派控制❌ 不支持✅ 支持
典型用途AD 内置账户、域控制器按部门/角色组织管理对象

新建用户时如果忘记选择目标 OU,对象就会落入默认容器,导致策略未生效。重定向可以从根本上避免这个问题。

原理:wellKnownObjects 属性

重定向的本质是修改域根对象的 wellKnownObjects 属性。AD 通过该属性记录几个知名容器的 DN:

  • CN=Users → 新建用户默认位置
  • CN=Computers → 新计算机加入域时的默认位置

redirusrredircmp 只是修改这个属性的便捷工具,效果等同于用 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 查看:

  1. 打开 ADSI Edit → 连接到默认命名上下文
  2. 右键点击域根节点(如 DC=example,DC=com)→ 属性
  3. 找到 wellKnownObjects 属性
  4. 确认 CN=UsersCN=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=UsersCN=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-ADUserNew-ADComputer 等工具手动指定了目标 OU 的操作不受影响。重定向只改变不指定位置时的默认行为。

5. 需要域管理员权限

执行 redirusrredircmp 需要域管理员(Domain Admins)权限。

与其他方法的对比

方法优点缺点
redirusr / redircmp简单一行命令,微软官方工具不可逆,需手动迁移已有对象
ADSI Edit 修改 wellKnownObjects更灵活,可回退操作复杂,容易出错
脚本创建时指定 OU完全可控无法防止 ADUC 图形界面忘记选择
Powershell 策略审计可检测遗漏需要额外部署,非根本解决

对于大多数场景,redirusr + redircmp 是最简单直接的方案。

最佳实践

  1. 建域时就执行:在新建域之后、创建大量用户之前完成重定向
  2. 预先创建好 OU 结构:规划好组织架构后再执行
  3. 立即迁移已有对象:避免部分对象在新 OU、部分在旧容器造成混乱
  4. 记录变更:在运维文档中记录重定向操作,方便后续排查
  5. 验证 GPO 生效:重定向后创建测试用户/计算机,确认链接到 OU 的 GPO 正常应用