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

如何使用Azure PowerShell Runbook连接Azure CosmosDB并执行查询取数

步骤1:前置配置准备
  • 为你的Azure自动化Runbook启用系统分配托管身份:进入自动化账户 → 身份 → 系统分配 → 状态设为「启用」,保存后记录生成的服务主体ID
  • 为托管身份分配CosmosDB数据访问权限:进入目标CosmosDB账户 → 访问控制(IAM) → 角色分配 → 添加角色分配,根据业务需求选择对应权限角色:
    • 仅需查询数据:选择Cosmos DB 数据读取者
    • 需增删改操作:选择Cosmos DB 数据参与者
      分配范围选择该CosmosDB账户,主体选择刚才启用的Runbook托管身份,完成分配
  • 在自动化账户中导入依赖PowerShell模块:进入自动化账户 → 模块 → 浏览库,搜索并导入Az.Accounts、Az.CosmosDB两个模块,选择与你Runbook运行环境匹配的版本(推荐PowerShell 7.1及以上运行环境)
步骤2:Runbook中建立CosmosDB连接

在Runbook编辑页添加以下身份验证代码,完成连接初始化:

# 使用Runbook托管身份登录Azure,跨租户场景需额外添加 -TenantId "目标租户ID" 参数
Connect-AzAccount -Identity

# 替换为你实际的CosmosDB配置参数
$cosmosAccountName = "你的CosmosDB账户名"
$resourceGroupName = "CosmosDB所在资源组名"
$databaseName = "目标数据库名"
$containerName = "目标容器名"
步骤3:执行任意CosmosDB查询操作

方式1:使用Az.CosmosDB模块执行SQL查询(SQL API场景推荐)

适配SQL API类型的CosmosDB,可直接执行任意符合CosmosDB SQL语法的查询语句:

# 编写自定义查询语句,支持聚合、筛选、分页等所有CosmosDB SQL语法
$query = "SELECT c.id, c.name, c.createTime FROM c WHERE c.status = 'active' OFFSET 0 LIMIT 100"

# 执行查询获取结果
$queryResult = Get-AzCosmosDBSqlItem `
  -ResourceGroupName $resourceGroupName `
  -AccountName $cosmosAccountName `
  -DatabaseName $databaseName `
  -ContainerName $containerName `
  -Query $query

# 处理/输出查询结果
$queryResult

注意:如果需要避免SQL注入风险,可通过-QueryParameter参数传入动态参数,示例:-QueryParameter @(@{name="@status"; value="active"}),对应查询语句写为SELECT * FROM c WHERE c.status = @status

方式2:调用REST API执行查询(兼容所有API类型)

适配Mongo API、Gremlin API等非SQL API场景,或有自定义请求头需求的场景:

# 获取CosmosDB数据平面访问令牌
$token = (Get-AzAccessToken -ResourceUrl "https://cosmos.azure.com").Token
$headers = @{
  "Authorization" = "Bearer $token"
  "x-ms-version" = "2021-04-15"
  "x-ms-documentdb-isquery" = "True"
  "Content-Type" = "application/query+json"
}

# 构造查询请求体
$requestBody = @{
  query = "SELECT * FROM c WHERE c.createTime >= '2024-01-01'"
  parameters = @()
} | ConvertTo-Json

# 构造请求地址并发送请求
$requestUrl = "https://$cosmosAccountName.documents.azure.com/dbs/$databaseName/colls/$containerName/docs"
$restResult = Invoke-RestMethod -Method Post -Uri $requestUrl -Headers $headers -Body $requestBody

# 输出查询返回的文档列表
$restResult.Documents

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:27:03