如何使用 Move-ADUser 在 OU 之间移动 AD 用户

最后更新于:

如果您想使用 PowerShell 将 AD 用户移动到另一个 OU,最简单的方法是通过 Move-ADUser cmdlet。它帮助 IT 管理员根据组织需求(如部门调整)或合规原因(例如应用针对性的组策略或安全控制)将用户移动到不同的 OU。本文涵盖了高效移动单个和多个用户的实用示例,同时保持安全性和责任追踪。

  • PowerShell
  • ADUC
  • ADManager Plus
  • 原生工具的限制
  • 为什么选择 ADManager Plus
  • 常见问题解答
 

使用 PowerShell 将 AD 用户移动到另一个 OU

前提条件

  1. 以管理员身份打开 PowerShell ISE。
  2. If the Active Directory (AD) module isn't installed, download and install the Remote Server Administration Tools package for your Windows version. Then import the module:
    Import-Module ActiveDirectory
  3. Run the following command in PowerShell to move a user to another OU. Replace username with the user's name and TargetOU with the destination OU's distinguished name:
    Get-ADUser -Identity "username" | Move-ADObject -TargetPath "OU=TargetOU,DC=domain,DC=com"
  4. To move multiple users at once, use the following script to get all users from a source OU and pipe them to Move-ADObject:
    $users = Get-ADUser -Filter * -SearchBase "OU=SourceOU,DC=contoso,DC=com" | Select-Object -Property DistinguishedName
    foreach ($user in $users) {
    Move-ADObject -Identity $user.DistinguishedName -TargetPath "OU=DestinationOU,DC=contoso,DC=com"
    }

Move-ADUser 的使用示例

示例 1:将 AD 用户移动到另一个 OU

这会将用户帐户移动到同一域内的目标 OU:

Get-ADUser -Identity <sAMAccountName> | Move-ADObject -TargetPath "OU=<TargetOU>,DC=<domain>,DC=<tld>"

示例 2:使用唯一名称移动用户

这直接使用用户的唯一名称将其从源 OU 移动到目标 OU:

Move-ADObject -Identity "CN=<UserCN>,OU=<SourceOU>,DC=<domain>,DC=<tld>" -TargetPath "OU=<TargetOU>,DC=<domain>,DC=<tld>"

示例 3:从 CSV 文件批量移动多个用户

这通过从 CSV 文件导入用户名,将多个用户移动到新的财务 OU:

Import-Csv "C:\UsersList.csv" | ForEach-Object {
Get-ADUser -Identity $_.SamAccountName | Move-ADObject -TargetPath "OU=Finance,DC=domain,DC=com"
}

示例 4:将所有用户从一个 OU 移动到另一个 OU

这会将源 OU 中的所有用户移动到目标 OU:

Get-ADUser -SearchBase "OU=<SourceOU>,DC=<domain>,DC=<tld>" -Filter * | ForEach-Object { Move-ADObject -Identity $_.DistinguishedName -TargetPath "OU=<TargetOU>,DC=<domain>,DC=<tld>" }

示例 5:将用户移动到子 OU

这会将用户移动到主 OU 内的嵌套 OU:

Get-ADUser -Identity <sAMAccountName> | Move-ADObject -TargetPath "OU=<ChildOU>,OU=<ParentOU>,DC=<domain>,DC=<tld>"

支持的参数

以下是 Move-ADUser cmdlet 常用的一些参数:

参数 描述
-Identity 指定要移动的 AD 对象(用户、计算机、组等);您可以使用对象的唯一名称或全局唯一标识符 (GUID)
-TargetPath 定义对象应移动到的目标 OU 或容器
-Server 指定用于执行移动操作的域控制器 (DC) 或 AD 域服务实例
-Credential 使用备用用户凭据运行命令,而不是当前登录帐户的凭据
-Partition 指定包含要移动对象的 AD 分区(例如,DC=domain,DC=com
-PassThru 命令运行后返回已移动的对象,便于验证或在后续命令中使用
-Confirm 在执行移动前提示确认,有助于避免意外更改
-WhatIf 模拟命令而不进行任何更改,让您事先查看结果

排错技巧

错误:无法验证参数 'Identity' 的参数。该参数为空。

解决方案: 这意味着 $useridentity 变量为空或未正确获取。确保传递有效的对象或唯一名称。例如,使用 Get-ADUser $username 获取用户,并确认变量包含预期对象后再在 Move-ADUser 中使用。

错误:操作无法执行,因为对象的父对象未实例化或已被删除。

解决方案: 当目标 OU 不存在、拼写错误或最近被删除时会发生此问题。仔细检查唯一名称,并使用 Get-ADOrganizationalUnit 验证 OU 是否存在。

错误:Move-ADObject:安全包中没有可用的凭据。

解决方案: 当当前安全上下文缺少所需权限时会发生此问题,尤其是在跨域移动时。确保您拥有正确权限,考虑指定 -Credential 参数或使用具有足够权限的帐户重新认证。

错误:请求的操作无法执行,因为目录服务不是该类型操作的主控。

解决方案: 跨域移动对象时,确保源和目标 DC 都是相对标识符 (RID) 主控。连接到适当的 DC,或在同时持有两个域 RID 主控角色的 DC 上执行移动。使用 netdom query fsmo 验证角色。

错误:无法跨域边界移动具有成员身份的对象。

解决方案: 域本地组中的用户不能直接跨域移动。先将其从不兼容的组中移除,执行移动后再重新分配组成员身份。

错误:访问被拒绝。

解决方案: 运行命令的账户权限不足。请使用具有必要权限的账户执行 PowerShell:理想情况下为 Domain Admins 或相关 OU 的委派权限。

错误:Move-ADObject:跨域移动操作的源和目标相同。调用者应使用本地移动操作,而非跨域移动操作。

解决方案: 如果源 OU 和目标 OU 相同,会出现此情况。请在尝试移动前确认源和目标的区分名称不同。

使用 ADUC 在 OU 之间移动 AD 用户

AD Users and Computers (ADUC) 是移动 AD 用户的常用方法。

  1. 打开 ADUC。
  2. 转到用户当前所在的源 OU。
  3. 选择要移动的用户账户。右键点击所选用户,点击 移动,然后在对话框中选择目标 OU。
  4. 要选择多个用户,请按住 ShiftCtrl 并点击。将选中的用户拖放到左侧面板的目标 OU 中。
  5. 在对话框中点击 确定 以确认移动。
使用 ADUC 将 AD 用户移动到另一个 OU。

使用 ADManager Plus 批量将 AD 用户移动到另一个 OU

使用 ADManager Plus,您可以轻松地单独或批量在 OU 之间移动用户账户。

  1. 登录 ADManager Plus。
  2. 转到 管理 > 用户管理
  3. 批量用户修改 下点击 移动用户
  4. 点击 + 图标并选择目标容器(OU)。
  5. 从下拉菜单中选择用户当前所在的域。如果您知道用户所在的 OU,点击 添加 OU 并选择它。
  6. 按名称查找用户或导入 CSV 文件。
  7. 点击 应用 将选定用户移动到新 OU。
使用 ADManager Plus 在 AD 中的 OU 之间移动用户。

使用本地工具在 OU 之间移动 AD 用户的限制

虽然使用 PowerShell 等本地工具将 AD 用户从一个 OU 移动到另一个看似简单,但存在一些限制:

  • 更新多个用户时,PowerShell 脚本可能变得复杂。
  • 排查错误耗时且影响工作效率。
  • 语法、参数和迭代必须正确。拼写错误或语法错误可能难以发现和修正,尤其是脚本较长时。
  • 只有知道 AD 账户的区分名称或 GUID,才能移动该 AD 用户。
  • 无法将 AD 账户修改或其他 AD 管理任务委派给帮助台技术人员。

使用 ADManager Plus 在 OU 之间移动用户的亮点

ADManager Plus 通过单一直观的控制台,使 AD 管理更简单、更快捷。以下是它为何是 IT 团队更佳选择的原因:

使用 CSV 文件批量将用户移动到不同 OU。

常见问题解答

使用 ADUC

在 ADUC 中移动计算机对象涉及的不仅是单一权限;需要在源 OU 上具有计算机对象的创建权限,在目标 OU 上具有计算机对象的删除权限。但这被视为高度特权访问。

为降低风险,请将这些权限委派给专门的安全组,并定期审查其成员资格:

  1. 打开 ADUC。
  2. 右键点击源 OU,选择 委派控制
  3. 添加安全组或用户以委派权限。
  4. 选择 创建自定义任务以委派 > 仅文件夹中的以下对象 > 计算机对象
  5. 勾选 删除此文件夹中选定的对象
  6. 对目标 OU 重复步骤 1 到 4。
  7. 勾选 在此文件夹中创建选定的对象

使用 PowerShell

对源 OU 和目标 OU 运行相同的脚本:

# Replace values
$OU = 'OU=SourceOU,DC=yourdomain,DC=com'
$group = 'YOURDOMAIN\DelegatedGroup'
$groupSID = (New-Object System.Security.Principal.NTAccount($group)).Translate([System.Security.Principal.SecurityIdentifier]).Value
$ComputerObjectGUID = 'bf967a86-0de6-11d0-a285-00aa003049e2'
$rights = [System.DirectoryServices.ActiveDirectoryRights]::CreateChild -bor [System.DirectoryServices.ActiveDirectoryRights]::Delete
$rule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($groupSID, $rights, 'Allow', $ComputerObjectGUID, 'All')
$acl = Get-ACL "AD:\$OU"
$acl.AddAccessRule($rule)
Set-ACL "AD:\$OU" $acl

使用 ADManager Plus

或者,可以使用无脚本工具,如 ADManager Plus,只需几次点击即可完成相同操作:

  1. 登录 ADManager Plus。
  2. 转到 Delegation > Help Desk Delegation > Help Desk Roles
  3. 点击 + Create New Role
  4. 输入角色名称。
  5. 转到 Computer Management,在 批量计算机修改 下选择 移动计算机,然后点击 保存
  6. 转到 Delegation > Help Desk Delegation > Help Desk Technicians
  7. 点击 + 添加新技术员 创建新技术员。
  8. 将新创建的角色分配给该技术员。

跨域移动用户需要信任关系和迁移工具(如 AD Migration Tool (ADMT) 或 PowerShell)或点击式界面工具(如 ADManager Plus),因为仅使用 ADUC 无法处理密码、安全标识符(SID)历史记录或域特定属性复制。

使用 ADMT

  1. 在目标域的服务器上安装 ADMT。
  2. 确保源域和目标域或林之间存在信任关系。
  3. 打开 ADMT 并选择 用户帐户迁移向导
  4. 选择源域或林并选择要迁移的用户帐户。
  5. 指定用户的目标域和 OU。
  6. 配置迁移选项,如密码迁移、SID 历史和组成员资格。
  7. 运行迁移。

使用 PowerShell

对于跨域或跨林迁移,可以使用导出和导入的方法。

  1. Export users from the source domain:
    Get-ADUser -Filter * -Properties * | Export-Csv C:\Temp\Users.csv -NoTypeInformation
  2. 修改 CSV 以匹配目标域属性(新的 OU、用户主体名称等)。
  3. Import users into the target domain:
    Import-Csv C:\Temp\Users.csv | ForEach-Object {
    New-ADUser -Name $_.Name -SamAccountName $_.SamAccountName -UserPrincipalName $_.UserPrincipalName -Path $_.OU -GivenName $_.GivenName -Surname $_.Surname -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) -Enabled $true
    }

使用 ADManager Plus

对于无脚本、用户友好的选项:

  1. 登录 ADManager Plus。
  2. 转到 Management > Migration > User Migration
  3. 选择要迁移的用户。
  4. 配置源和目标设置。
  5. 点击 预览 并运行迁移。
Active Directory管理与报告的一站式解决方案
电子邮件下载链接 Email the ADManager Plus download link