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

如何通过PowerShell/REST API执行带参数与分区键的Cosmos DB存储过程?

在PowerShell中执行带参数且指定分区键的Azure Cosmos DB存储过程

PowerShell脚本(使用Az.CosmosDB模块)

先确保已安装并导入Az.CosmosDB模块:

Install-Module -Name Az.CosmosDB -Force -AllowClobber
Import-Module Az.CosmosDB

执行带参数和指定分区键的存储过程示例:

# 配置核心参数
$cosmosDbAccountName = "你的CosmosDB账户名"
$resourceGroupName = "资源组名称"
$databaseName = "目标数据库名"
$containerName = "目标容器名"
$storedProcedureName = "存储过程名称"
$partitionKeyValue = "你的分区键值" # 需与容器分区键的数据类型匹配
$procedureParameters = @("参数1", "参数2", 123) # 对应存储过程定义的入参顺序

# 执行存储过程
Invoke-AzCosmosDBStoredProcedure `
    -AccountName $cosmosDbAccountName `
    -ResourceGroupName $resourceGroupName `
    -DatabaseName $databaseName `
    -ContainerName $containerName `
    -StoredProcedureName $storedProcedureName `
    -PartitionKey $partitionKeyValue `
    -Parameter $procedureParameters

关键说明:

  • PartitionKey参数用于指定分区键值,确保请求路由到正确的物理分区
  • Parameter接受数组类型,需与存储过程定义的入参数量、顺序一致

使用REST API调用(PowerShell中通过Invoke-RestMethod实现)

如果需要直接调用REST API,需先生成授权签名,完整示例如下:

# 基础配置
$accountName = "你的CosmosDB账户名"
$accountKey = "CosmosDB账户主键"
$databaseId = "目标数据库ID"
$containerId = "目标容器ID"
$sprocId = "存储过程ID"
$partitionKeyValue = "你的分区键值"
$parameters = @("参数1", 456) # 存储过程所需参数

# 构建请求URL
$baseUri = "https://$accountName.documents.azure.com"
$sprocUri = "$baseUri/dbs/$databaseId/colls/$containerId/sprocs/$sprocId"

# 生成授权头
$date = Get-Date -Format "r"
$resourceType = "sprocs"
$resourceLink = "dbs/$databaseId/colls/$containerId/sprocs/$sprocId"
$verb = "POST"

# 计算签名
$signatureString = "$verb`n$resourceType`n$resourceLink`n$date`n`n"
$signatureBytes = [System.Text.Encoding]::UTF8.GetBytes($signatureString)
$keyBytes = [System.Convert]::FromBase64String($accountKey)
$hmacSha256 = New-Object System.Security.Cryptography.HMACSHA256($keyBytes)
$signatureHash = $hmacSha256.ComputeHash($signatureBytes)
$signature = [System.Convert]::ToBase64String($signatureHash)
$authHeader = "type=master&ver=1.0&sig=$signature"

# 构建请求头与请求体
$headers = @{
    "x-ms-date" = $date
    "Authorization" = $authHeader
    "x-ms-version" = "2023-03-15"
    "x-ms-documentdb-partitionkey" = "[""$partitionKeyValue""]" # 分区键必须以JSON数组格式传递
    "Content-Type" = "application/json"
}
$body = @{
    "parameters" = $parameters
} | ConvertTo-Json

# 发送请求并输出结果
$response = Invoke-RestMethod -Uri $sprocUri -Method Post -Headers $headers -Body $body
Write-Output $response

关键说明:

  • x-ms-documentdb-partitionkey头必须用JSON数组格式传递,即使是单个分区键值
  • 需确保使用的REST API版本与你的CosmosDB账户兼容(示例使用2023-03-15)
  • 账户主键可在Azure门户的CosmosDB账户「密钥」页面获取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:40:30