You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell将用户管理的多个AD组管理者批量修改为其直属经理

PowerShell AD组管理者批量转移脚本修正

原脚本存在3个核心错误导致无法正常运行:

  • Get-ADUser返回的manager属性是直属经理的DN字符串,不是AD用户对象,直接调用$Manager.DistinguishedName会返回空值
  • managedObjects属性返回的是所有被管理对象的DN字符串集合,每个元素没有.Group属性,$_.Group调用会报错
  • 缺少边界场景处理:如果离职用户没有配置直属经理、没有管理任何AD组、或管理的对象包含非组类型(比如OU、计算机账户)时,脚本会抛出异常

修正后的可用脚本如下:

# 读取要操作的用户名
$SamAccountName = Read-Host "Enter the username"

# 一次性获取用户的managedObjects和manager属性,减少AD查询次数
$TargetUser = Get-ADUser $SamAccountName -Properties managedObjects, manager

# 校验是否配置了经理
if (-not $TargetUser.manager) {
    Write-Warning "该用户未配置直属经理,终止组管理者转移操作"
    exit
}
# 获取经理的完整AD对象
$Manager = Get-ADUser $TargetUser.manager

# 校验是否有管理的对象
if (-not $TargetUser.managedObjects) {
    Write-Host "该用户未管理任何AD对象,无需转移权限"
    exit
}

# 遍历所有被管理对象,只处理组类型
$TargetUser.managedObjects | ForEach-Object {
    $ADObject = Get-ADObject $_
    # 只筛选安全组、通讯组进行转移
    if ($ADObject.ObjectClass -eq "group") {
        try {
            Set-ADGroup -Identity $ADObject.DistinguishedName -ManagedBy $Manager.DistinguishedName -ErrorAction Stop
            Write-Host "成功转移组 $($ADObject.Name) 的管理者权限给 $($Manager.Name)"
        }
        catch {
            Write-Warning "转移组 $($ADObject.Name) 管理者失败:$_"
        }
    }
}

可选优化说明:

  • 如果需要跳过特定组,可以在筛选条件中添加排除规则
  • 如果需要同时转移其他类型AD对象的管理者权限,可以修改ObjectClass的判断条件
  • 批量操作前可以先添加-WhatIf参数到Set-ADGroup后,预演操作确认没有问题再正式执行

内容的提问来源于stack exchange,提问作者joshua william

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:00:01