我想执行ExchangeOnline命令,并通过 Select 某些属性将其转换为JSON,所有这些都在单个命令中完成!

例如,我的命令要 for each SharedMailbox获取RecipientPermissions,其输出为:

// command

Get-EXOMailbox -RecipientTypeDetails "SharedMailbox" -ResultSize unlimited | foreach { Get-EXORecipientPermission -Identity $_.Identity } 

上述命令样例输出为

 Identity          : testexosv
 Trustee           : NT AUTHORITY\SELF
 AccessControlType : Allow
 AccessRights      : {SendAs}
 IsInherited       : False
 InheritanceType   : All

 Identity          : SMBP
 Trustee           : 2b33e774737b4da26c2e551c00f
 AccessControlType : Allow
 AccessRights      : {SendAs}
 IsInherited       : False
 InheritanceType   : None

首先,我想将上述输出转换为JSON.因此,如果我简单地将其传递到ConvertTo-Json,则AccessRights的值将丢失如下:

 [
     {
       "Identity": "SMBP",
       "Trustee": "2b33e774737b4da26c2e551c00f",
       "AccessControlType": "Allow",
       "AccessRights": [
              1
        ],
       "IsInherited": false,
       "InheritanceType": "None"
     },
     {
       "Identity": "testexosv",
       "Trustee": "NT AUTHORITY\\SELF",
       "AccessControlType": "Allow",
       "AccessRights": [
          1
        ],
       "IsInherited": false,
       "InheritanceType": "All"
     }
  ]

其次,我只想在结果中 Select 特定的属性,例如:Identity, Trustee, AccessRights,将它们重命名为任意键,并且仍然保持Json struct .所以我实际上想要的O/P是:

 [
     {
       "ShareMailbox": "SMBP",
       "UPN": "2b33e774737b4da26c2e551c00f",  
       "Roles": [
              "SendAs"
        ]
     },
     {
       "SharedMailbox": "testexosv",
       "UPN": "NT AUTHORITY\\SELF",
       "Roles": [
          "SendAs"
        ]
     }
  ]

我试过以下命令:

 Get-EXOMailbox -RecipientTypeDetails "SharedMailbox" -ResultSize unlimited 
 | foreach { Get-EXORecipientPermission -Identity $_.Identity 
 | foreach {$_.Identity, $_.Trustee, [String]$_.AccessRights } | ConvertTo-Json} 

但它只提供JSON数组,而不是JSON对象.上述命令的输出为

 [
   "SMBP",
   "2b33e774737b4da26c2e551c00f",
   "SendAs"
 ]
 [
   "testexosv",
   "NT AUTHORITY\\SELF",
   "SendAs"
  ]

推荐答案

Get-EXOMailbox -RecipientTypeDetails "SharedMailbox" -ResultSize unlimited |
 ForEach-Object Identity |
 Get-EXORecipientPermission |
 Select-Object Identity, Trustee, AccessRights |
 ConvertTo-Json -EnumAsStrings

注:

  • Get-EXORecipientPermission可能接受Get-EXOMailbox输出directly作为管道输入(我无法亲自验证这一点),在这种情况下,您可以删除ForEach-Object Identity管道段.

  • Select-Object用于仅提取感兴趣的属性(添加到[pscustomobject]个实例中,这些实例具有包含输入对象属性值的静态副本的同名属性).

  • ConvertTo-Json‘S -EnumAsStringsswitch -仅在PowerShell (Core) 7+中可用-确保[enum]派生的值的实例-默认情况下由其underlying numeric values串行化-改为由其symbolic names串行化,即AS strings.

Json相关问答推荐

如何判断响应数组是否存在以及S是否有其他内容...?

使用JQ从jsonl文件中删除具有匹配键/值的行

如何让JSON子查询在没有行的情况下返回空数组而不是NULL

如何使用模式注册中心创建从主题中取消本地化的ks qlDB表?

在Ruby的json中压缩单个字段

使用JQ将JSON输出转换为CSV复杂 struct

展平多个数组以保持顺序

Spark-SQL中的from_unixtime函数未能给出正确的输出

将boost::beast::multibuffer转换为std::istream

在这种情况下我如何实现 UnmarshalJSON 并且只为一个接口字段定义特殊行为?

使用 Groovy 将 XML 转换为 JSON

数据清理设计不良的 JSON 数据 - 需要有关最佳策略的建议

Powershell - 如何从 JSON 中删除/过滤元素但保留其余部分?

Kotlin Android Room 处理 Moshi TypeConverter 中的空对象列表

PowerShell - 如何迭代 PSCustomObject 嵌套对象?

JSON Schema 与 XML Schema 的比较及其future

编写 JSON 日志(log)文件的格式?

使用 Spring 和 JsonTypeInfo 注释将 JSON 反序列化为多态对象模型

仅使用字符串和值解析 JSON 对象

如何在 React js 中解析本地 JSON 文件?