如何通过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
相关产品推荐
相关产品推荐

