我试图从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
}
]
期望输出:与上面相同,但没有description
和objectId
属性。
JMESPath目前还不支持删除属性/键。这个请求已经开放了一段时间了:基于jmespath #121
设置和删除的能力正如链接GitHub问题中提到的,一个解决方法是将输出($json
)管道到jq
:
echo $json | jq 'del(.[0].objectId, .[0].description)'
将产生以下输出,不包括objectId
和description
:
[
{
"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
}
]