如何一次性列出Azure账户所有订阅中的Azure SQL Server?
列出所有Azure订阅中的Azure SQL Server
首先明确:Azure REST API目前不支持单次调用跨所有订阅查询Azure SQL Server,必须先获取所有订阅列表,再逐个订阅发起API请求。如果不想手动处理多订阅的API调用,用脚本是更高效的方案,下面提供两种常用脚本实现:
PowerShell 脚本
这个脚本会自动获取你有权访问的所有订阅,遍历每个订阅查询SQL Server,并汇总带订阅信息的结果:
# 获取当前账户可访问的所有订阅 $subscriptions = Get-AzSubscription # 初始化存储结果的数组 $sqlServers = @() # 循环处理每个订阅 foreach ($sub in $subscriptions) { Write-Host "正在查询订阅: $($sub.Name) ($($sub.Id))" # 切换到当前订阅 Select-AzSubscription -SubscriptionId $sub.Id | Out-Null # 查询该订阅下的所有Azure SQL Server $servers = Get-AzSqlServer # 给每个服务器添加订阅信息,存入结果数组 foreach ($server in $servers) { $sqlServers += [PSCustomObject]@{ 订阅名称 = $sub.Name 订阅ID = $sub.Id SQL服务器名称 = $server.ServerName 资源组名称 = $server.ResourceGroupName 区域 = $server.Location 完全限定域名 = $server.FullyQualifiedDomainName } } } # 格式化输出结果 $sqlServers | Format-Table -AutoSize # 可选:导出结果到CSV文件 # $sqlServers | Export-Csv -Path "所有SQL服务器列表.csv" -NoTypeInformation -Encoding UTF8
Azure CLI 脚本
如果你习惯用CLI,这个脚本同样能实现跨订阅查询:
# 获取所有订阅ID subscriptions=$(az account list --query "[].id" -o tsv) # 初始化结果字符串 all_servers="" # 遍历每个订阅 for sub in $subscriptions; do echo "正在查询订阅 ID: $sub" # 切换到当前订阅 az account set --subscription $sub # 查询该订阅下的SQL Server,并带上订阅ID server_json=$(az sql server list --query "[].{订阅ID:'$sub', SQL服务器名称:name, 资源组名称:resourceGroup, 区域:location, 完全限定域名:fullyQualifiedDomainName}" -o json) # 合并结果 all_servers+="$server_json," done # 修正JSON格式并输出(需要安装jq工具) echo "[${all_servers%,}]" | jq . # 可选:导出到JSON文件 # echo "[${all_servers%,}]" | jq . > "所有SQL服务器列表.json"
使用前准备
- PowerShell:确保安装了Az模块(
Install-Module -Name Az.Accounts -Force),然后用Connect-AzAccount登录Azure账户 - Azure CLI:安装后用
az login登录,若需要格式化JSON输出,需安装jq工具
内容的提问来源于stack exchange,提问作者Swetha Balakrishnan
相关产品推荐
相关产品推荐

