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

如何通过Get-ADPermission对象关联Get-ADUser获取权限用户详细信息?

解决ADPermission对象关联ADUser获取扩展属性的问题

我之前处理过类似的Exchange权限报告需求,你遇到的问题核心是没搞清楚ADPermission对象里User属性的本质——它返回的是一个SecurityIdentifier(SID)对象,不是直接能传给Get-ADUser的用户名/UPN,这就是直接调用报错的原因。下面给你两种可靠的解决思路:

方法一:逐个关联AD用户(适合小批量场景)

直接利用Get-ADUser支持SID对象作为-Identity参数的特性,遍历每个权限条目并获取对应的AD用户属性:

# 1. 获取目标邮箱的非继承Send-As权限条目
$targetMailbox = "<mailbox>" # 替换成你的邮箱标识(别名/UPN/邮箱地址)
$sendAsPermissions = Get-Mailbox -Identity $targetMailbox | 
                     Get-ADPermission | 
                     Where-Object {
                         $_.ExtendedRights -like "*Send-As*" -and 
                         $_.IsInherited -eq $false
                     }

# 2. 遍历权限条目,关联AD用户并构建报告
$sendAsReport = foreach ($perm in $sendAsPermissions) {
    # 直接用SID对象查询AD用户,同时指定需要扩展属性
    $adUser = Get-ADUser -Identity $perm.User -Properties Department, CanonicalName, DisplayName

    # 构建自定义报告对象
    [PSCustomObject]@{
        目标邮箱名称       = (Get-Mailbox -Identity $perm.Identity).DisplayName
        授权用户显示名称   = $adUser.DisplayName
        授权用户部门       = $adUser.Department
        授权用户规范名称   = $adUser.CanonicalName
        授权用户SID        = $perm.User.Value
        权限类型           = "Send-As"
        是否继承权限       = $perm.IsInherited
    }
}

# 输出报告(可按需改成Export-Csv导出到文件)
$sendAsReport | Format-Table -AutoSize

方法二:批量查询AD用户(适合大批量场景,提升性能)

如果需要处理的权限条目很多,反复调用Get-ADUser会影响效率,建议先收集所有需要查询的SID,再批量获取AD用户信息:

# 1. 获取目标邮箱的非继承Send-As权限条目
$targetMailbox = "<mailbox>"
$sendAsPermissions = Get-Mailbox -Identity $targetMailbox | 
                     Get-ADPermission | 
                     Where-Object {
                         $_.ExtendedRights -like "*Send-As*" -and 
                         $_.IsInherited -eq $false
                     }

# 2. 收集所有需要查询的SID并去重
$uniqueSids = $sendAsPermissions.User | Select-Object -Unique

# 3. 批量获取AD用户的扩展属性
$adUserList = Get-ADUser -Filter { SID -in $uniqueSids } -Properties Department, CanonicalName, DisplayName

# 4. 关联权限条目与AD用户信息,构建报告
$sendAsReport = foreach ($perm in $sendAsPermissions) {
    $matchedUser = $adUserList | Where-Object { $_.SID -eq $perm.User }
    [PSCustomObject]@{
        目标邮箱名称       = $perm.Identity.Name
        授权用户显示名称   = $matchedUser.DisplayName
        授权用户部门       = $matchedUser.Department
        授权用户规范名称   = $matchedUser.CanonicalName
        授权用户SID        = $perm.User.Value
        权限类型           = "Send-As"
        是否继承权限       = $perm.IsInherited
    }
}

# 导出为CSV文件
$sendAsReport | Export-Csv -Path ".\SendAs权限报告.csv" -NoTypeInformation -Encoding UTF8

关键知识点说明

  • 为什么$sa_user.Identity是邮箱?因为ADPermission的Identity属性代表被授予权限的对象(也就是你指定的目标邮箱),而User属性才是拥有权限的主体(能Send-As的用户/组)。
  • 如果你需要处理组权限的情况,可以额外判断$perm.User是否是组SID,再调用Get-ADGroup获取组信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:00:14