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

如何用PowerShell从ExchangeOnline命令获取指定结构的JSON

单条PowerShell命令导出共享邮箱权限为指定结构JSON

解决AccessRights丢失+属性重命名的命令

如果需要直接输出包含所有权限条目的JSON数组:

Get-Recipient -RecipientTypeDetails SharedMailbox | ForEach-Object {
    $mailbox = $_.Identity
    Get-RecipientPermission -Identity $mailbox | Where-Object { $_.Trustee -ne 'NT AUTHORITY\SELF' } | ForEach-Object {
        [PSCustomObject]@{
            SharedMailbox = $mailbox
            UPN           = $_.Trustee
            Roles         = $_.AccessRights | ForEach-Object { $_.ToString() }
        }
    }
} | ConvertTo-Json -Depth 3

如果需要外层包裹一个对象(满足特定的JSON结构要求):

[PSCustomObject]@{
    SharedMailboxPermissions = (Get-Recipient -RecipientTypeDetails SharedMailbox | ForEach-Object {
        $mailbox = $_.Identity
        Get-RecipientPermission -Identity $mailbox | Where-Object { $_.Trustee -ne 'NT AUTHORITY\SELF' } | ForEach-Object {
            [PSCustomObject]@{
                SharedMailbox = $mailbox
                UPN           = $_.Trustee
                Roles         = $_.AccessRights | ForEach-Object { $_.ToString() }
            }
        }
    })
} | ConvertTo-Json -Depth 3

关键说明

  1. 解决AccessRights丢失问题:AccessRights是枚举类型,直接用ConvertTo-Json会丢失文本名称,通过$_.AccessRights | ForEach-Object { $_.ToString() }将其转为字符串数组,保留权限的可读名称。
  2. 属性重命名与结构控制:使用PSCustomObject直接定义输出的属性名(SharedMailbox、UPN、Roles),确保JSON结构完全符合需求,避免Select-Object可能导致的属性类型异常。
  3. 过滤默认权限:通过Where-Object { $_.Trustee -ne 'NT AUTHORITY\SELF' }排除共享邮箱自身的默认权限,可根据实际需求删除此条件。
  4. 序列化深度:添加-Depth 3确保嵌套的Roles数组被正确序列化,避免深层结构被截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:18:23