使用 Azure CLI 和 JMESPath 进行筛选
Filtering with Azure CLI and JMESPath
我正在使用 Azure CLI 获取 vnet 对等互连列表:az network vnet peering list
。这个returnsjson结构如下:
[
{
...
"name": "prefix1-name",
...
},
{
...
"name": "prefix2-name",
...
}
]
我正在尝试按以某个前缀开头的名称过滤结果。我尝试了以下各种组合:
az network vnet peering list --resource-group my-rg --vnet-name my-vnet --query "[?starts_with(name,'prefix1-')].{name}"
但是,这总是失败并显示 ].{name} was unexpected at this time
.
之类的消息
我错过了什么?
尝试使用az network vnet peering list --resource-group my-rg --vnet-name my-vnet --query "[?starts_with(name,'prefix1-')].name"
。您不需要在 name
中包含 {}
。这对我有用。
编辑
对于错误消息,我可以在 windows 10 机器的本地 PowerShell 中使用这些 Azure CLI 命令重现它。但是这个并没有出现在我的本地Linux Bash Shell如上面的截图。此错误也不会出现在 PowerShell 和 Azure 云 shell.
中的 Bash
经我验证,它看起来像是本地 PowerShell 上的特定场景。当你用 JMESPath 过滤时,我只是试过函数 starts_with
或 contains
需要函数之间的 space,它的工作原理如下:
--query "[?starts_with(name, 'vnet')].name"
--query "[?starts_with (name,'vnet')].name"
--query "[?starts_with(name,'vnet') ].name"
--query "[?starts_with(name,'vnet')] .name"
但这不起作用,如下所示。
--query "[?starts_with(name,'vnet')].name"
答案显然是在 )
和 ]
之间放置一个 space,所以 az network vnet peering list --resource-group my-rg --vnet-name my-vnet --query "[?starts_with(name,'prefix1-') ].name
对我有用。不知道为什么,也没有找到任何提及此类内容的文档。如果我删除 space 我会收到 ].name was unexpected at this time
消息。
这是一个 Windows PowerShell 问题:https://github.com/Azure/azure-cli/blob/dev/doc/use_cli_effectively.md#argument-parsing-issue-in-powershell。要解决此问题,请在 az
之后插入 --%
以强制 PowerShell 将该行中的剩余字符视为文字。
我正在使用 Azure CLI 获取 vnet 对等互连列表:az network vnet peering list
。这个returnsjson结构如下:
[
{
...
"name": "prefix1-name",
...
},
{
...
"name": "prefix2-name",
...
}
]
我正在尝试按以某个前缀开头的名称过滤结果。我尝试了以下各种组合:
az network vnet peering list --resource-group my-rg --vnet-name my-vnet --query "[?starts_with(name,'prefix1-')].{name}"
但是,这总是失败并显示 ].{name} was unexpected at this time
.
我错过了什么?
尝试使用az network vnet peering list --resource-group my-rg --vnet-name my-vnet --query "[?starts_with(name,'prefix1-')].name"
。您不需要在 name
中包含 {}
。这对我有用。
编辑
对于错误消息,我可以在 windows 10 机器的本地 PowerShell 中使用这些 Azure CLI 命令重现它。但是这个并没有出现在我的本地Linux Bash Shell如上面的截图。此错误也不会出现在 PowerShell 和 Azure 云 shell.
中的 Bash经我验证,它看起来像是本地 PowerShell 上的特定场景。当你用 JMESPath 过滤时,我只是试过函数 starts_with
或 contains
需要函数之间的 space,它的工作原理如下:
--query "[?starts_with(name, 'vnet')].name"
--query "[?starts_with (name,'vnet')].name"
--query "[?starts_with(name,'vnet') ].name"
--query "[?starts_with(name,'vnet')] .name"
但这不起作用,如下所示。
--query "[?starts_with(name,'vnet')].name"
答案显然是在 )
和 ]
之间放置一个 space,所以 az network vnet peering list --resource-group my-rg --vnet-name my-vnet --query "[?starts_with(name,'prefix1-') ].name
对我有用。不知道为什么,也没有找到任何提及此类内容的文档。如果我删除 space 我会收到 ].name was unexpected at this time
消息。
这是一个 Windows PowerShell 问题:https://github.com/Azure/azure-cli/blob/dev/doc/use_cli_effectively.md#argument-parsing-issue-in-powershell。要解决此问题,请在 az
之后插入 --%
以强制 PowerShell 将该行中的剩余字符视为文字。