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

PowerShell:拆分Get-Mailbox中GrantSendOnBehalfTo多值至单独行

解决Exchange邮箱代理发送权限报告的多账户显示问题

最近我在生成Sales Dept邮箱的代理发送权限报告时踩了个坑:单代理账户的时候结果完全正常,但一旦有多个账户,GrantSendOnBehalfTo里的所有值就会被自动拼成一个用空格分隔的字符串。我试着用换行符"n"`来拼接,结果它还是被当成一个带换行的单个字符串,根本没法把各个代理账户分开看。

我最开始用的代码是这样的:

get-mailbox "Sales Dept" | select identity,displayname,@{l='SendOnBehalfOf';e={$_.GrantSendOnBehalfTo -join "`n"}}

后来摸索出两个靠谱的解决办法,分享给你:

方法1:生成结构化的多行报告(适合导出或后续处理)

这个方法会给每个代理账户单独生成一条记录,不管是查看还是导出成CSV都非常清晰:

Get-Mailbox "Sales Dept" | ForEach-Object {
    $currentMailbox = $_
    # 遍历每个代理账户,生成独立的对象
    foreach ($proxyAccount in $currentMailbox.GrantSendOnBehalfTo) {
        [PSCustomObject]@{
            Identity = $currentMailbox.Identity
            DisplayName = $currentMailbox.DisplayName
            SendOnBehalfOf = $proxyAccount
        }
    }
}

方法2:控制台显示时每行一个代理(仅控制台查看友好)

如果只是想在控制台里让每个代理账户单独占一行显示,不用改变整体结构,可以用Out-String -Stream处理数组:

Get-Mailbox "Sales Dept" | Select-Object Identity, DisplayName, @{
    Name = 'SendOnBehalfOf'
    Expression = { $_.GrantSendOnBehalfTo | Out-String -Stream }
}

为啥之前的方法不行?

其实GrantSendOnBehalfTo本身是一个数组类型的属性,当你用-join "n"`把它转换成字符串后,它就从数组变成了单个字符串值——哪怕里面有换行,本质还是一个字符串。所以要保留每个代理的独立性,就得直接遍历数组生成单独条目,而不是把数组拼成字符串。

内容的提问来源于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 07:47:31