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

如何通过PowerShell的Get-Mailbox获取多个OU的邮箱权限?

多OU场景下的邮箱权限查询脚本修改方案

你可以通过以下步骤修改脚本,使其支持多个OU的查询,同时修复原脚本中的潜在问题:

修改后完整脚本

# 定义需要查询的OU数组
$ouList = @(
    "OU=gmsa_accounts,DC=contoso,DC=local",
    "OU=svc_accounts,DC=contoso,DC=local",
    "OU=adm_accounts,OU=Users,DC=contoso,DC=local"
)

# 初始化邮箱集合(用ArrayList提升性能)
$Mailboxes = New-Object System.Collections.ArrayList

# 遍历每个OU,收集所有邮箱
foreach ($ou in $ouList) {
    $ouMailboxes = Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox -OrganizationalUnit $ou
    if ($ouMailboxes) {
        [void]$Mailboxes.AddRange($ouMailboxes)
    }
}

# 初始化结果集合
$MailboxesResult = New-Object System.Collections.ArrayList

# 处理每个邮箱的权限信息
foreach ($Mailbox in $Mailboxes) {
    # 获取FullAccess权限(修复原脚本中Where-Object的变量错误)
    $fullAccessPermissions = Get-MailboxPermission -Identity $Mailbox.Alias | 
        Where-Object { !$_.IsInherited -and $_.User -notlike "NT AUTHORITY*" } |
        Where-Object { $_.AccessRights -eq "FullAccess" }
    
    # 获取SendAs权限(同样修复变量错误)
    $sendAsPermissions = Get-RecipientPermission -Identity $Mailbox.Alias |
        Where-Object { !$_.IsInherited -and $_.Trustee -notlike "NT AUTHORITY*" } |
        Where-Object { $_.AccessRights -eq "SendAs" }

    # 构造结果对象
    $item = [PSCustomObject]@{
        Name                          = $Mailbox.DisplayName
        FullAccess                    = ($fullAccessPermissions.User -replace '^.+\\') -join ','
        SendAs                        = ($sendAsPermissions.Trustee) -join ','
        # 可选:添加OU信息,方便区分邮箱所属OU
        OrganizationalUnit            = $Mailbox.OrganizationalUnit
    }
    [void]$MailboxesResult.Add($item)
}

# 导出结果到CSV
$MailboxesResult | Export-Csv -NoTypeInformation C:\Temp\MailboxFolderPermissions2.csv -Encoding UTF8

关键修改点

  • 定义多OU数组:把单个OU字符串替换为包含所有目标OU的数组$ouList,实现批量遍历查询。
  • 批量收集多OU邮箱:通过foreach循环遍历每个OU,调用Get-Mailbox获取对应OU的邮箱,并用ArrayList批量添加,覆盖多OU场景。
  • 修复逻辑错误:原脚本中Where-Object错误使用集合变量判断权限,改为用当前管道对象$_.AccessRights,确保权限判断准确。
  • 性能优化:改用System.Collections.ArrayList替代数组拼接+=,避免频繁重建数组,提升大数量场景下的处理速度。
  • 可选增强:新增OrganizationalUnit字段,方便后续区分每个邮箱所属OU,便于结果分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:25:36