如何通过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
相关产品推荐
相关产品推荐

