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

如何让PowerShell脚本在所有域中运行以查询用户管理的组

跨域查询AD用户管理的所有组脚本修改方案

原脚本仅能在当前域内查询,要实现跨所有域查询,核心思路是遍历当前AD林中的所有域,逐个查询目标用户及该用户管理的组。以下是修改后的完整脚本:

param (
    [Parameter(Mandatory=$true)]
    [string]$Username
)

# 获取当前AD林内的所有域
try {
    $allDomains = (Get-ADForest).Domains
}
catch {
    Write-Host "无法获取AD林信息,请确认AD模块可用且有权限访问林信息"
    exit 1
}

$userDN = $null
$allManagedGroups = @()

# 先遍历所有域查找目标用户,获取其DistinguishedName
foreach ($domain in $allDomains) {
    try {
        $user = Get-ADUser -Identity $Username -Server $domain -ErrorAction Stop
        $userDN = $user.DistinguishedName
        Write-Host "在域 $domain 中找到用户 $Username"
        break  # 找到用户后停止遍历
    }
    catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException] {
        # 用户不在当前域,继续下一个
        continue
    }
    catch {
        Write-Host "连接域 $domain 失败: $_"
        continue
    }
}

if (-not $userDN) {
    Write-Host "用户 '$Username' 在当前AD林的所有域中均未找到"
    exit 0
}

# 遍历所有域,查询该用户管理的组
foreach ($domain in $allDomains) {
    try {
        $managedGroupsInDomain = Get-ADGroup -LDAPFilter "(managedBy=$userDN)" -Server $domain -ErrorAction Stop |
                                 Select-Object Name, DistinguishedName
        if ($managedGroupsInDomain) {
            $allManagedGroups += $managedGroupsInDomain
            Write-Host "从域 $domain 找到 $($managedGroupsInDomain.Count) 个由 $Username 管理的组"
        }
    }
    catch {
        Write-Host "查询域 $domain 时出错: $_"
        continue
    }
}

# 输出整理后的结果
if ($allManagedGroups) {
    Write-Host "`n用户 '$Username' 在所有域中管理的组(按域分组):"
    $allManagedGroups | Group-Object -Property { $_.DistinguishedName.Split(',')[1].Split('=')[1] } | ForEach-Object {
        Write-Host "`n域: $($_.Name)"
        $_.Group | Sort-Object Name | ForEach-Object { Write-Host "  - $($_.Name)" }
    }
} else {
    Write-Host "用户 '$Username' 在所有域中均未管理任何组"
}

关键修改点说明

  • 获取所有域:通过Get-ADForest获取当前AD林内的所有域列表,确保遍历覆盖所有域
  • 跨域查找用户:逐个域查询目标用户,找到后记录其DistinguishedName(AD中用户的唯一标识)
  • 跨域查询管理组:使用用户的DN作为LDAP筛选条件,在每个域中查询managedBy属性匹配的组
  • 错误处理:添加了连接失败、用户不存在等异常处理,避免脚本直接崩溃
  • 结果整理:将结果按域分组输出,更清晰展示不同域的管理组

注意事项

  • 运行脚本的账号需要拥有所有目标域的AD读取权限
  • 确保已安装RSAT的AD PowerShell模块(ActiveDirectory模块)
  • 如果部分域不可达,脚本会跳过该域并继续处理其他域

内容的提问来源于stack exchange,提问作者Mr.RamGoat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:12:20