# add necessary assembly # Add-Type -AssemblyName System.Web # generate authorization key Function Generate-MasterKeyAuthorizationSignature { [CmdletBinding()] Param ( [Parameter(Mandatory=$true)][String]$verb, [Parameter(Mandatory=$true)][String]$resourceLink, [Parameter(Mandatory=$true)][String]$resourceType, [Parameter(Mandatory=$true)][String]$dateTime, [Parameter(Mandatory=$true)][String]$key, [Parameter(Mandatory=$true)][String]$keyType, [Parameter(Mandatory=$true)][String]$tokenVersion ) $hmacSha256 = New-Object System.Security.Cryptography.HMACSHA256 $hmacSha256.Key = [System.Convert]::FromBase64String($key) $payLoad = "$($verb.ToLowerInvariant())`n$($resourceType.ToLowerInvariant())`n$resourceLink`n$($dateTime.ToLowerInvariant())`n`n" $hashPayLoad = $hmacSha256.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($payLoad)) $signature = [System.Convert]::ToBase64String($hashPayLoad); [System.Web.HttpUtility]::UrlEncode("type=$keyType&ver=$tokenVersion&sig=$signature") } # Function to insert document in Azure Cosmos DB Function Post-CosmosDb { [CmdletBinding()] Param ( [Parameter(Mandatory=$true)][String]$EndPoint, [Parameter(Mandatory=$true)][String]$DataBaseId, [Parameter(Mandatory=$true)][String]$CollectionId, [Parameter(Mandatory=$true)][String]$MasterKey, [Parameter(Mandatory=$true)][String]$JSON ) $Verb = "POST" $ResourceType = "docs"; $ResourceLink = "dbs/$DatabaseId/colls/$CollectionId" $partitionkey = "[""$(($JSON |ConvertFrom-Json)."Partition Key Name""")""]" $dateTime = [DateTime]::UtcNow.ToString("r") $authHeader = Generate-MasterKeyAuthorizationSignature -verb $Verb -resourceLink $ResourceLink -resourceType $ResourceType -key $MasterKey -keyType "master" -tokenVersion "1.0" -dateTime $dateTime $header = @{authorization=$authHeader;"x-ms-version"="2017-02-22";"x-ms-documentdb-partitionkey"=$partitionkey;"x-ms-date"=$dateTime} $contentType= "application/json" $queryUri = "$EndPoint$ResourceLink/docs" #[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Invoke-RestMethod -Method $Verb -ContentType $contentType -Uri $queryUri -Headers $header -Body $JSON #return $result.statuscode } # fill the target cosmos database endpoint uri, database id, collection id and masterkey $CosmosDBEndPoint = "https://XXXXXXX.documents.azure.com:443/" $DatabaseId = "Database NameID" $CollectionId = "Collection Name ID" $MasterKey = "Read write key value" $document = @" # Values to be inserted in JSON format { `"id`": `"$([Guid]::NewGuid().ToString())`", `"Name`": `"Dinesh Kumar`", `"Department`": `"IT`" } "@ # execute Post-CosmosDb -EndPoint $CosmosDBEndPoint -DataBaseId $DataBaseId -CollectionId $CollectionId -MasterKey $MasterKey -JSON $document -Verbose -Debug # Function to fetch the data from single document in JSON Format Function Get-CosmosDocument { [CmdletBinding()] Param ( [Parameter(Mandatory=$true)][String]$EndPoint, [Parameter(Mandatory=$true)][String]$DataBaseId, [Parameter(Mandatory=$true)][String]$CollectionId, [Parameter(Mandatory=$true)][String]$MasterKey ) $Verb = "GET" $ResourceType = "docs"; $DocumentID = "Document id" $ResourceLink = "dbs/$DatabaseId/colls/$CollectionId/docs/$DocumentID" $KeyValue = "Key Value" $partitionkey = "[""$($KeyValue)""]" #$partitionkey $dateTime = [DateTime]::UtcNow.ToString("r") $authHeader = Generate-MasterKeyAuthorizationSignature -verb $Verb -resourceLink $ResourceLink -resourceType $ResourceType -key $MasterKey -keyType "master" -tokenVersion "1.0" -dateTime $dateTime $header = @{authorization=$authHeader;"x-ms-version"="2017-02-22";"x-ms-documentdb-partitionkey"=$partitionkey;"x-ms-date"=$dateTime} $contentType= "application/json" $queryUri = "$EndPoint$ResourceLink" Invoke-RestMethod -Method $Verb -Uri $queryUri -Headers $header } # fill the target cosmos database endpoint uri, database id, collection id and masterkey $CosmosDBEndPoint = "https://XXXXXX.documents.azure.com:443/" $DatabaseId = "Database NameID" $CollectionId = "Collection name ID" $MasterKey = "Read Only key value" # execute Get-CosmosDocument -EndPoint $CosmosDBEndPoint -DataBaseId $DataBaseId -CollectionId $CollectionId -MasterKey $MasterKey -Verbose # Function to delete document from Cosmos DB Function Delete-CosmosDbDocument { [CmdletBinding()] Param ( [Parameter(Mandatory=$true)][String]$EndPoint, [Parameter(Mandatory=$true)][String]$DataBaseId, [Parameter(Mandatory=$true)][String]$CollectionId, [Parameter(Mandatory=$true)][String]$MasterKey #[Parameter(Mandatory=$true)][String]$JSON ) $Verb = "DELETE" $ResourceType = "docs"; $DocumentID = "Document id whcih needs to be deleted" $ResourceLink = "dbs/$DatabaseId/colls/$CollectionId/docs/$DocumentID" $KeyValue = "Partition Key value" $partitionkey = "[""$($KeyValue)""]" $dateTime = [DateTime]::UtcNow.ToString("r") $authHeader = Generate-MasterKeyAuthorizationSignature -verb $Verb -resourceLink $ResourceLink -resourceType $ResourceType -key $MasterKey -keyType "master" -tokenVersion "1.0" -dateTime $dateTime $header = @{authorization=$authHeader;"x-ms-version"="2015-12-16";"x-ms-documentdb-partitionkey"=$partitionkey;"x-ms-date"=$dateTime} #$contentType= "application/json" $queryUri = "$EndPoint$ResourceLink" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Invoke-RestMethod -Method $Verb -Uri $queryUri -Headers $header -Verbose #return $result.statuscode } # fill the target cosmos database endpoint uri, database id, collection id and masterkey $CosmosDBEndPoint = "https://XXXXXXXX.documents.azure.com:443/" #URI $DatabaseId = "Database Nameid" $CollectionId = "Collection Name ID" $MasterKey = "Read Write Key value" # execute Delete-CosmosDbDocument -EndPoint $CosmosDBEndPoint -DataBaseId $DataBaseId -CollectionId $CollectionId -MasterKey $MasterKey -Verbose |