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

