PowerShell foreach变量传入AZ CLI查询无返回问题排查
问题原因及解决方案
核心问题:引号转义错误导致变量未正确替换
你的代码中--query参数的引号处理存在问题,多余的转义双引号(")导致PowerShell无法正确解析循环变量$item,同时传递给Azure CLI的JMESPath查询表达式格式无效,最终返回空结果。
你提到调试发现$item为空,大概率是误解——$vnetPNames数组定义是正确的,foreach循环中$item应该会依次取到Name1、Name2、Name3,真正的问题出在az命令的参数传递上。
修复后的代码
去掉多余的转义引号,直接用双引号包裹--query参数(让PowerShell解析$item变量),内部JMESPath表达式里的字符串用单引号:
$vnetPNames = @("Name1","Name2","Name3") foreach ($item in $vnetPNames) { # 正确的query写法:双引号包裹整个参数,内部字符串用单引号 $getId = az network vnet list --query "[?name == '$item'].id" -o tsv # 可先输出验证ID是否获取成功 Write-Host "VNet $item 的资源ID:$getId" az network vnet peering create ... }
额外注意事项
- 如果目标虚拟网络不在当前Azure订阅下,需先切换订阅:
az account set --subscription <订阅ID/名称> - 确保执行命令的账号拥有读取虚拟网络的权限
- 可单独执行
az network vnet list --query "[?name == 'Name1'].id" -o tsv验证查询是否有效,排除网络或权限问题
内容的提问来源于stack exchange,提问作者confused-nerd
相关产品推荐
相关产品推荐

