排除 Azure CLI 输出的 JSON 中的属性



我试图从Azure的CLI输出中排除一些属性。我知道我可以使用--query通过其JMESPath过滤输出。但是我只想排除其中一个,所以使用--query选择所有其他的是没有意义的。

有办法做到这一点吗?我正在寻找类似于PowerShell可以做的事情:

Select-Object -Property * -ExcludeProperty

下面的例子说明了一个特殊的情况。

示例命令:az ad group list -o json

输出:

[
{
"deletionTimestamp": null,
"description": "app_description",
"dirSyncEnabled": null,
"displayName": "name",
"lastDirSyncTime": null,
"mail": "sample@domain.com",
"mailEnabled": true,
"mailNickname": "sampleMail",
"objectId": "xxxxxx-xxxx-xxxxxxxx-xxxxx",
"objectType": null,
"onPremisesDomainName": null,
"onPremisesNetBiosName": null,
"onPremisesSamAccountName": null,
"onPremisesSecurityIdentifier": null,
"provisioningErrors": [],
"proxyAddresses": [],
"securityEnabled": false
}
]

期望输出:与上面相同,但没有descriptionobjectId属性。

JMESPath目前还不支持删除属性/键。这个请求已经开放了一段时间了:基于jmespath #121

设置和删除的能力正如链接GitHub问题中提到的,一个解决方法是将输出($json)管道到jq:

echo $json | jq 'del(.[0].objectId, .[0].description)'

将产生以下输出,不包括objectIddescription:

[
{
"deletionTimestamp": null,
"dirSyncEnabled": null,
"displayName": "name",
"lastDirSyncTime": null,
"mail": "sample@domain.com",
"mailEnabled": true,
"mailNickname": "sampleMail",
"objectType": null,
"onPremisesDomainName": null,
"onPremisesNetBiosName": null,
"onPremisesSamAccountName": null,
"onPremisesSecurityIdentifier": null,
"provisioningErrors": [],
"proxyAddresses": [],
"securityEnabled": false
}
]

最新更新