問題描述
遠程服務器返回錯誤:(400) 錯誤請求。在 C:\Program Files\WindowsPowerShell\Modules\CosmosDB\3.1.0.293\CosmosDB.psm1 (The remote server returned an error: (400) Bad Request. At C:\Program Files\WindowsPowerShell\Modules\CosmosDB\3.1.0.293\CosmosDB.psm1)
我有一個 PowerShell 腳本,用於在 Azure Cosmos DB 中創建數據庫和集合。我正在嘗試使用下面的 PowerShell 腳本在集合中插入一些虛擬記錄。
#region Parameters
$clientId= "XXXXXXXXXXXXXXX"
$clientSecret= "XXXXXXXXXXXX="
$subscriptionName= "XXXXXXXXXXXXXXX"
$tenantId= "XXXXXXXXXXXXXXXX"
$resourceGroupName= "Demo"
$connectionString='XXXXXXXXXXXXXXXXx=='
$cosmosDBAccounts= @('demo‑account‑01')
$databaseName='demo‑db‑01'
$collectionName='demo‑collection‑01'
$partitionkey= 'demo'
#endregion
#region Login into Azure using Interactive Mode or Service Principal details
# sign in
Write‑Host "Logging in...";
#Connect‑AzAccount
$securePassword = $clientSecret | ConvertTo‑SecureString ‑AsPlainText ‑Force
$cred = new‑object ‑typename System.Management.Automation.PSCredential ‑argumentlist $clientId, $securePassword
Connect‑AzAccount ‑Credential $cred ‑ServicePrincipal ‑TenantId $tenantId
#Set the current azure subscription
Select‑AzSubscription ‑subscription $subscriptionName
#endregion
#region Create Collection and insert some data into it
foreach($cosmosDBAccount in $cosmosDBAccounts){
$key = Get‑CosmosDbAccountMasterKey ‑Name $cosmosDBAccount ‑ResourceGroupName $resourceGroupName
$cosmosDbContext = New‑CosmosDbContext ‑Account $cosmosDBAccount ‑Key $key
New‑CosmosDbDatabase ‑Context $cosmosDbContext ‑Id $databaseName
New‑CosmosDbCollection ‑Context $cosmosDbContext ‑Id $collectionName ‑PartitionKey $partitionkey ‑OfferThroughput 2500 ‑Database $databaseName
0..9 | Foreach‑Object {
$document = @"
{
"id": "$([Guid]::NewGuid().ToString())",
"name": "pradeep",
"demo": "AAA"
}
"@
New‑CosmosDbDocument ‑Context $cosmosDbContext ‑CollectionId $collectionName ‑DocumentBody $document ‑PartitionKey "AAA"
}
}
#endregion
但是每當我運行上面的腳本時,我都會收到如下所示的錯誤:
Invoke‑WebRequest :遠程服務器返回錯誤:(400)錯誤請求。在 C:\Program Files\WindowsPowerShell\Modules\CosmosDB\3.1.0.293\CosmosDB.psm1:5275 char:30 + ... $requestResult = Invoke‑WebRequest @invokeWebRequestParameters + ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke‑ WebRequest],WebException + FullyQualifiedErrorId :
參考解法
方法 1:
You created the collection with the
$partitionkey= 'demo'
, so you need to new the document with it, then it will work fine.$document = @" { "id": "$([Guid]::NewGuid().ToString())", "name": "pradeep", "demo": "AAA" } "@ New‑CosmosDbDocument ‑Context $cosmosDbContext ‑CollectionId 'cll3' ‑DocumentBody $document ‑PartitionKey "AAA"
Update:
Try the complete command as below, it should work.
$cosmosDBAccounts= @('joycosmos') $resourceGroupName = 'joywebapp' $partitionkey = 'demo' $databaseName = 'db1' $collectionName = 'clle' foreach($cosmosDBAccount in $cosmosDBAccounts){ $cosmosDbContext = New‑CosmosDbContext ‑Account $cosmosDbAccount ‑Database $databaseName ‑ResourceGroup $resourceGroupName New‑CosmosDbDatabase ‑Context $cosmosDbContext ‑Id $databaseName New‑CosmosDbCollection ‑Context $cosmosDbContext ‑Id $collectionName ‑PartitionKey $partitionkey ‑OfferThroughput 2500 ‑Database $databaseName 0..9 | Foreach‑Object { $document = @" { "id": "$([Guid]::NewGuid().ToString())", "name": "pradeep", "demo": "AAA" } "@ New‑CosmosDbDocument ‑Context $cosmosDbContext ‑CollectionId $collectionName ‑DocumentBody $document ‑PartitionKey "AAA" } }
參考文件