Powershell module for Cosmos DB operations
Install-Module cosmos-dbExtracts and parses the response Content of other commands and handles known error codes (404, 429)
Generally this is pipelined after another command which returns an HTTP response - e.g. Get-CosmosDbRecord ... | Get-CosmosDbRecordContent
Fetches a single DB record, returns the HTTP response of the lookup
$record = Get-CosmosDbRecord ...
| Get-CosmosDbRecordContent| Name | Usage | Required |
|---|---|---|
| ResourceGroup | Azure Resource Group of the database | Yes |
| Database | The database name | Yes |
| Container | The container name inside the database | Yes |
| Collection | The collection name inside the container | Yes |
| RecordId | The resource id | Yes |
| SubscriptionId | The Azure Subscription Id | No - defaults to whatever az defaults to |
| PartitionKey | The partition key of the resource | No - defaults to RecordIdMust be set if the collection uses a different parition scheme |
Fetches all DB record, returns the HTTP response. The records will be within the Documents property of the result.
$records = Get-AllCosmosDbRecords ...
| Get-CosmosDbRecordContent
| % Documents| Name | Usage | Required |
|---|---|---|
| ResourceGroup | Azure Resource Group of the database | Yes |
| Database | The database name | Yes |
| Container | The container name inside the database | Yes |
| Collection | The collection name inside the container | Yes |
| SubscriptionId | The Azure Subscription Id | No - defaults to whatever az defaults to |
Queries the DB, returns the HTTP response. The records will be within the Documents property of the result.
This function is also used to perform aggregate queries (e.g. count, TOP, etc) - see examples below.
# Basic query with no parameters
$records = Search-CosmosDbRecords -Query "SELECT * FROM c WHERE c.Id in (1, 2, 3)" ...
| Get-CosmosDbRecordContent
| % Documents
# Basic query with parameters as name value pairs
$parameters = @(
@{ name = "@id"; value = "1234" },
@{ name = "@number"; value = 5678 }
)
$records = Search-CosmosDbRecords -Query "SELECT * FROM c WHERE c.Id = @id and c.Number > @number" -Parameters $parameters ...
| Get-CosmosDbRecordContent
| % Documents
# Basic query with parameters as hashtable
$parameters = @{
"@id" = "1234";
"@number" = 5678;
)
$records = Search-CosmosDbRecords -Query "SELECT * FROM c WHERE c.Id = @id and c.Number > @number" -Parameters $parameters ...
| Get-CosmosDbRecordContent
| % Documents
# Query TOP 10 records
$records = Search-CosmosDbRecords -Query "SELECT TOP 10 * FROM c" ...
| Get-CosmosDbRecordContent
| % Documents
# Count records by a property (aggregate example)
# Note: the results are within the Payload property of Documents and the aggregate value is inside the Item property of the aggregate value
$records = Search-CosmosDbRecords -Query "SELECT count(1) as Cnt, c.Property FROM c GROUP BY c.Property" ...
| Get-CosmosDbRecordContent
| % { $_.Documents.Payload }
| % { @{ Property = $_.Property; Count = $_.Cnt.Item} }| Name | Usage | Required |
|---|---|---|
| ResourceGroup | Azure Resource Group of the database | Yes |
| Database | The database name | Yes |
| Container | The container name inside the database | Yes |
| Collection | The collection name inside the container | Yes |
| Query | The query as a string with optional parameters | Yes |
| Parameters | Parameters values used in the query. Accepts an array of name-value pairs or a hashtable |
No |
| SubscriptionId | The Azure Subscription Id | No - defaults to whatever az defaults to |
| DisableExtraFeatures | Disables extra query features required to perform operations like aggregates, TOP, or DISTINCT. Should be used in case the support for these operations has a bug 😄 See the Cosmos DB docs here. |
No - defaults to false |
Creates a single DB record, returns the HTTP response of the operation
# Add a record
New-CosmosDbRecord -Object $record ...
# Add a record from pipeline
$record | New-CosmosDbRecord ...
# Add a record with a custom PartitionKey
$record | New-CosmosDbRecord -PartitionKey $record.PartitionKey ...
# Add several records with a custom PartitionKey
$recordList | New-CosmosDbRecord -GetPartitionKeyBlock { param($r) $r.PartitionKey } ...
# Copy all records from one collection to another
Get-AllCosmosDbRecords -Collection "Collection1" ...
| Get-CosmosDbRecordContent
| % Documents
| New-CosmosDbRecord -Collection "Collection2" ...| Name | Usage | Required |
|---|---|---|
| Object | The record to create | Yes Accepts value from pipeline |
| ResourceGroup | Azure Resource Group of the database | Yes |
| Database | The database name | Yes |
| Container | The container name inside the database | Yes |
| Collection | The collection name inside the container | Yes |
| SubscriptionId | The Azure Subscription Id | No - defaults to whatever az defaults to |
| PartitionKey | The partition key of the resource | No - defaults to IdMust be set if the collection uses a different parition scheme |
| GetPartitionKeyBlock | Callback to get the PartitionKey from Object - useful in pipelines |
No - used only if PartitionKey is not set |
Updates a single DB record, returns the HTTP response of the operation
The record must exist, if it does not the result is a 404
# Update a record
Update-CosmosDbRecord -Object $record ...
# Update a record from pipeline
$record | Update-CosmosDbRecord ...
# Update a record with a custom PartitionKey
$record | Update-CosmosDbRecord -PartitionKey $record.PartitionKey ...
# Update several records with a custom PartitionKey
$recordList | Update-CosmosDbRecord -GetPartitionKeyBlock { param($r) $r.PartitionKey } ...
# Updates all records in a DB
$records = Get-AllCosmosDbRecords ...
| Get-CosmosDbRecordContent
| % Documents
$records | foreach { $_.Value = "NewValue" }
$records | Update-CosmosDbRecord ...| Name | Usage | Required |
|---|---|---|
| Object | The record to create | Yes Accepts value from pipeline |
| ResourceGroup | Azure Resource Group of the database | Yes |
| Database | The database name | Yes |
| Container | The container name inside the database | Yes |
| Collection | The collection name inside the container | Yes |
| SubscriptionId | The Azure Subscription Id | No - defaults to whatever az defaults to |
| PartitionKey | The partition key of the resource | No - defaults to IdMust be set if the collection uses a different parition scheme |
| GetPartitionKeyBlock | Callback to get the PartitionKey from Object - useful in pipelines |
No - used only if PartitionKey is not set |
| EnforceOptimisticConcurrency | Enables or disables optimistic concurrency checks | No - default is enabled |
Deletes a single DB record, returns the HTTP response of the operation
Remove-CosmosDbRecord ...| Name | Usage | Required |
|---|---|---|
| ResourceGroup | Azure Resource Group of the database | Yes |
| Database | The database name | Yes |
| Container | The container name inside the database | Yes |
| Collection | The collection name inside the container | Yes |
| RecordId | The resource id | No - if not set, must supply RecordId |
| Object | The record to delete - must minimally have an id property |
No - if not set, must supply RecordIdAccepts value from pipeline |
| SubscriptionId | The Azure Subscription Id | No - defaults to whatever az defaults to |
| PartitionKey | The partition key of the resource | No - defaults to IdMust be set if the collection uses a different parition scheme |
| GetPartitionKeyBlock | Callback to get the PartitionKey from Object - useful in pipelines |
No - used only if PartitionKey is not set |
Enables or disables using readonly DB keys in commands. By default this is disabled (i.e. writable keys are used).
# Enable using readonly keys
Use-CosmosDbReadonlyKeys
# Disable using readonly keys (use writable keys)
Use-CosmosDbReadonlyKeys -Disable| Name | Usage | Required |
|---|---|---|
| Disable | Disables readonly keys if set (enables writable keys) | No - default is $false (which will enable readonly keys) |
Enables or disables internal flags in the module, normally should only be used for debugging or dogfooding
Use-CosmosDbInternalFlag -EnableFiddlerDebugging $true| Name | Usage | Required |
|---|---|---|
| EnableFiddlerDebugging | Sets the az flag env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION which enables az commands with a Fiddler proxy |
No - default is disabled |
| EnableCaching | Enables/disables caching certain values like DB keys, partition ranges, etc. Improves performance of nearly all operations. | No - default is enabled |
| EnablePartitionKeyRangeSearches | [Experimental] Enables/disables filtering Search queries to relevant partition ranges instead of a full scan. Improves performance of Search commands. |
No - default is disabled |
| EnableAuthHeaderReuse | Enables/disables reusing auth headers for commands which use continuation tokens, like Search-CosmosDbRecords or Get-AllCosmosDbRecords. |
No - default is enabled |
| EnableMasterKeyAuth | Enables/disables using master key based authentication instead of Entra Id. | No - default is disabled |
Any failed requests to the Cosmos DB API are returned from the calling command in the following format:
{
"StatusCode": 404,
"Content": "{\"Message\":\"...\" ...}",
"RawResponse": { "<HttpResponseMessage (PS7) or WebResponse (PS5)>" }
}Failed reponsed can be piped into Get-CosmosDbRecordContent in the same way as successful messages. It will check for common issues (record not found, DB not found, throttling, etc) and throw an appropriate message.