PowerShell 批量移动域计算机到指定 OU 的核心是筛选目标计算机、指定目标路径并执行 Move-ADObject;需先导入 ActiveDirectory 模块、验证源 OU 读取和目标 OU 写入权限,再按操作系统、名称列表或用户名匹配筛选,配合 -WhatIf 预览确保安全。

用 PowerShell 批量移动域计算机到指定 OU,核心是 筛选目标计算机 + 指定目标路径 + 执行移动。ADAC 不支持批量移动计算机对象,必须用 PowerShell;操作前需确保账户有源 OU 的“读取”和目标 OU 的“写入”权限。
准备环境与权限
以管理员身份打开 PowerShell,运行以下命令确认模块可用:
Import-Module ActiveDirectory
如提示模块未找到,需在域控或已安装 RSAT 的管理机上启用“Active Directory 模块 for Windows PowerShell”。
验证权限:能成功执行 Get-ADComputer -Filter * -SearchBase "OU=源,DC=domain,DC=com" 且无拒绝访问错误,说明具备读取权限;移动操作还需对目标 OU 具备“创建计算机对象”和“删除计算机对象”权限(通常 Domain Admin 或 OU 管理员角色满足)。
计算机网络安全服务公司网站模板是一款适合提供云安全、网络安全、服务器管理。数据安全服务公司宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。
按条件筛选并移动计算机
常见场景分三类,对应不同筛选逻辑:
-
按操作系统类型归类:比如把所有 Windows 10 计算机移入
OU=Win10,OU=Workstations,DC=contoso,DC=com
Get-ADComputer -Filter "OperatingSystem -like '*Windows 10*'" -Properties OperatingSystem | ForEach-Object { Move-ADObject -Identity $_.DistinguishedName -TargetPath "OU=Win10,OU=Workstations,DC=contoso,DC=com" } -
按名称列表批量移动:已有计算机名清单(如
D:\pcs.txt,每行一个主机名)
$names = Get-Content D:\pcs.txt
foreach ($name in $names) { Move-ADObject -Identity "CN=$name,CN=Computers,DC=contoso,DC=com" -TargetPath "OU=Sales,DC=contoso,DC=com" }
注意:若计算机不在默认 Computers 容器中,需先用 Get-ADComputer $name 获取其当前 DN,再传给 -Identity。 -
按用户名匹配移动:适用于计算机名与用户登录名一致的环境(如笔记本命名规则为员工工号)
Get-ADUser -SearchBase "OU=Employees,DC=contoso,DC=com" -Filter * | ForEach-Object {
$pc = Get-ADComputer -Filter "Name -eq '$($_.SamAccountName)'"
if ($pc) { Move-ADObject -Identity $pc.DistinguishedName -TargetPath "OU=Laptops,OU=Devices,DC=contoso,DC=com" }
}
安全执行与验证
批量操作务必加防护措施:
- 先用 -WhatIf 参数预览动作:
Move-ADObject -Identity "CN=PC001,OU=Old,DC=contoso,DC=com" -TargetPath "OU=New,DC=contoso,DC=com" -WhatIf - 移动后快速验证:
Get-ADComputer -SearchBase "OU=New,DC=contoso,DC=com" -Filter * | Select Name, DistinguishedName - 避免误操作:目标 OU 路径必须完整、准确(RFC 1779 格式),大小写不敏感但空格和逗号不能错;移动时原位置的计算机对象会自动删除,不可逆。
补充:加域时直接指定 OU(新计算机)
对尚未加入域的新设备,可在加域命令中一步到位指定 OU,省去后续移动步骤:
Add-Computer -DomainName contoso.local -OUPath "OU=Temp,DC=contoso,DC=com" -Credential contoso\admin -Restart -Force
或使用 netdom join:
netdom join %computername% /d:contoso.local /ou:"OU=Temp,DC=contoso,DC=com" /userd:contoso\admin /passwordd:P@ssw0rd /reboot:10

















