You need to enable JavaScript to run this app. 如何使用PowerShell列出Azure订阅下所有SQL数据库并按名称筛选
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell列出Azure订阅下所有SQL数据库并按名称筛选

跨订阅全量拉取Azure SQL数据库并按名称模糊筛选的实现方案

你之前使用的单命令查询仅支持固定资源组、固定服务器维度的数据库拉取:$dbs = (az sql db list --resource-group rg1 --server myservername | ConvertFrom-Json),现在需要扩展到整个订阅范围拉取全量数据库、同时支持匹配Crm%这类规则的模糊筛选,可以按下面两种适配不同场景的方案实现:

方案一:逐服务器遍历拉取(权限要求低,全场景兼容)

由于SQL数据库资源是挂载在SQL逻辑服务器下的,原生的az sql db list命令不支持直接跨所有服务器拉取全量库数据,因此先拉取订阅下所有SQL逻辑服务器列表,再逐台遍历拉取库信息,全程兼容你原有的ConvertFrom-Json处理输出的使用习惯,完整可直接复用的代码如下:

# 拉取当前登录上下文下,整个订阅范围内的所有SQL逻辑服务器
$allSqlServers = az sql server list | ConvertFrom-Json

# 逐台遍历服务器,拉取所有数据库,自动排除每台服务器自带的系统master库
$allSubDbs = foreach ($server in $allSqlServers) {
    az sql db list --resource-group $server.resourceGroup --server $server.name | ConvertFrom-Json | Where-Object { $_.name -ne "master" }
}

# 按需求执行模糊筛选,直接适配Crm%这类带%通配符的匹配规则
$filteredDbs = $allSubDbs | Where-Object { $_.name -like "Crm%" }

使用注意点:

  • PowerShell原生的-like运算符天然支持%作为通配符,不需要额外调整匹配语法,如果需要修改筛选规则,直接替换匹配字符串即可,比如使用%Crm%即可筛选名称任意位置包含Crm的数据库
  • 如果当前CLI登录账号关联了多个订阅,需要先执行az account set --subscription "目标订阅ID"锁定查询范围,避免拉到非目标订阅的资源数据
  • 拉取结果已经自动过滤了无业务价值的系统master库,减少无效数据干扰

方案二:资源图快速聚合查询(大规模资源场景效率更高)

当订阅下SQL服务器数量较多(比如超过20台)时,逐台遍历拉取的耗时会明显变长,这时可以使用Azure资源图的平台侧聚合能力,直接跨全订阅查询所有SQL数据库资源,不需要逐台遍历服务器,查询速度会大幅提升,对应命令如下:

# 通过资源图直接拉取全订阅的SQL数据库,内置过滤系统master库的逻辑
$allSubDbs = az graph query -q "resources | where type == 'microsoft.sql/servers/databases' and name != 'master'" | ConvertFrom-Json

# 后续模糊筛选逻辑和遍历方案完全一致
$filteredDbs = $allSubDbs | Where-Object { $_.name -like "Crm%" }

使用注意点:

  • 该方式要求当前登录账号对目标订阅具备资源图查询权限,常规的订阅读者、贡献者及以上权限都默认满足要求
  • 资源图的查询结果是平台侧实时聚合的元数据,不需要逐台接口调用,资源规模越大效率优势越明显

内容的提问来源于stack exchange,提问作者Abbey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 06:15:01