可以使用PowerShell批量重命名OU中的用户、计算机、组等对象,核心是通过Get-ADUser/Get-ADComputer/Get-ADGroup等cmdlet按SearchBase筛选目标,再用Rename-ADObject修改CN(显示名)或Set-ADUser等更新属性,并务必先用-WhatIf预览、验证路径唯一性、导出备份并捕获错误。
可以使用powershell批量重命名ou中的对象(如用户、计算机、组等),核心是结合 get-adobject 或更具体的 cmdlet(如 get-aduser)筛选目标对象,再通过 rename-adobject 或 set-aduser 等命令更新名称属性。关键在于准确限定ou路径、匹配规则和重命名逻辑。
确认目标OU路径并测试筛选结果
先用 Get-ADOrganizationalUnit 验证OU的DistinguishedName是否正确,再用 Get-ADObject 或具体对象cmdlet 测试能否精准获取待重命名的对象:
- 运行
Get-ADOrganizationalUnit -Filter 'Name -eq "Sales"' | Select DistinguishedName获取完整OU路径 - 用该路径筛选对象,例如:
Get-ADUser -SearchBase "OU=Sales,DC=contoso,DC=com" -Filter * -Properties Name | Select Name, DistinguishedName - 务必加
-WhatIf参数预览操作,避免误改(如配合Rename-ADObject -WhatIf)
按统一规则批量重命名用户(常用场景)
例如将所有用户“姓 名”格式的 Name 和 DisplayName 改为“名 姓”,同时保持sAMAccountName不变:
- 脚本示例:
Get-ADUser -SearchBase "OU=Sales,DC=contoso,DC=com" -Filter * | ForEach-Object {<br> $newName = "$($_.GivenName) $($_.Surname)";<br> Rename-ADObject -Identity $_.DistinguishedName -NewName $newName -WhatIf;<br> Set-ADUser -Identity $_.DistinguishedName -DisplayName $newName;<br>} - 注意:
Rename-ADObject修改的是对象在AD中的显示名(即LDAP name 属性),而Set-ADUser更新的是 displayName;两者常需同步 - 若仅需改sAMAccountName或其它属性,用
Set-ADUser -SamAccountName等对应参数,不可用Rename-ADObject
批量重命名计算机或安全组
计算机对象的 Name 属性对应其主机名(即CN),重命名需谨慎(可能影响信任、GPO应用);组对象同理:
- 重命名计算机:
Get-ADComputer -SearchBase "OU=Workstations,DC=contoso,DC=com" -Filter "Name -like 'OLD-PRE-*'" | ForEach-Object {<br> $newName = $_.Name -replace '^OLD-PRE-', 'NEW-PRO-';<br> Rename-ADObject -Identity $_.DistinguishedName -NewName $newName -WhatIf;<br>} - 重命名组(如统一前缀):
Get-ADGroup -SearchBase "OU=Groups,DC=contoso,DC=com" -Filter "Name -like 'Legacy_*'" | ForEach-Object {<br> $newName = $_.Name -replace '^Legacy_', 'GRP_';<br> Rename-ADObject -Identity $_.DistinguishedName -NewName $newName -WhatIf;<br>} - 执行前确保新名称在同级OU中唯一,否则会报错“An object with that name already exists”
安全与容错建议
生产环境操作必须兼顾可追溯性和失败处理:
- 始终先导出原始列表:
Get-ADUser -SearchBase "OU=Sales..." -Filter * | Select Name, DistinguishedName, SamAccountName | Export-Csv .\before.csv -NoTypeInformation - 捕获错误并记录失败项:
... | ForEach-Object { try { Rename-ADObject ... } catch { $_ | Export-Csv .\failed-renames.csv -Append } } - 避免在循环中频繁调用AD模块——可先用
Get-AD*缓存结果,再统一处理 - 域控制器需启用AD PowerShell模块(
Import-Module ActiveDirectory),且当前用户有OU内对象的写权限











