You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Web应用内置PowerShell如何免传参遍历配置连接字符串

无需手动传参遍历Azure App Service连接字符串的通用实现

完全可以实现无硬编码参数的通用逻辑,所有运行所需的上下文信息、鉴权能力都由App Service运行时内置提供,代码可以直接在任意Azure App Service实例中运行,不需要针对不同环境修改参数。

核心原理

Azure App Service在启动应用时,会自动在运行环境中注入两类可直接复用的能力,不需要手动配置:

  • 内置环境变量:自动注入当前实例所属的订阅ID、资源组名、站点名等上下文信息,对应调用REST API需要的三个路径参数
  • 本地元数据服务:固定本地IP的元数据端点,开启系统分配托管标识后,可以直接拿到调用Azure管理REST API所需的访问令牌,不需要手动配置服务主体、密钥

关键内置信息对应关系

需要的三个参数全部可以从环境变量直接读取,不需要手动传入:

  • subscriptionId:对应环境变量WEBSITE_SUBSCRIPTION_ID
  • resourceGroupName:对应环境变量WEBSITE_RESOURCE_GROUP
  • name(应用名称):对应环境变量WEBSITE_SITE_NAME

前置准备

在应用的「标识」配置页开启系统分配托管标识即可,不需要给这个标识额外配置权限:默认情况下站点本身的托管标识就有读取自身站点配置的权限。

PowerShell 实现代码

# 1. 从内置环境变量读取REST API所需的路径参数
$subscriptionId = $env:WEBSITE_SUBSCRIPTION_ID
$resourceGroup = $env:WEBSITE_RESOURCE_GROUP
$siteName = $env:WEBSITE_SITE_NAME

# 2. 从本地元数据服务获取管理API的访问令牌
$tokenResponse = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2019-08-01&resource=https://management.azure.com/' -Headers @{Metadata = "true"} -Method Get
$accessToken = $tokenResponse.access_token

# 3. 拼接REST API地址,调用获取连接字符串列表
$apiUri = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.Web/sites/$siteName/config/connectionstrings/list?api-version=2022-03-01"
$connStrings = Invoke-RestMethod -Uri $apiUri -Headers @{Authorization = "Bearer $accessToken"} -Method Post

# 4. 遍历所有连接字符串
foreach ($conn in $connStrings.Properties.PSObject.Properties) {
    Write-Host "连接字符串名称:$($conn.Name)"
    Write-Host "连接字符串类型:$($conn.Value.type)"
    Write-Host "连接字符串值:$($conn.Value.value)`n"
}

更简便的替代方案

如果不需要获取连接字符串的类型属性,只是要拿连接字符串的值,甚至不用调用REST API:所有配置在「Configuration -> Connection strings」下的条目,App Service都会自动注入成带前缀的环境变量,可以直接遍历环境变量拿到所有值,前缀规则如下:

  • 常规SQL连接字符串:前缀SQLCONNSTR_
  • Azure SQL连接字符串:前缀SQLAZURECONNSTR_
  • MySQL连接字符串:前缀MYSQLCONNSTR_
  • PostgreSQL连接字符串:前缀POSTGRESQLCONNSTR_
  • 自定义类型连接字符串:前缀CUSTOMCONNSTR_

注意:这种方式拿到的键名是去掉前缀后的名称,值和配置页一致,但无法直接获取配置页上选择的连接字符串类型字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:54:19