Last active
March 4, 2020 20:27
-
-
Save sqldeployhelmet/035f9529d3780e2825998427a877de20 to your computer and use it in GitHub Desktop.
Powershell script to query cosmosdb services for a list of databases and containers in them.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<# | |
Author: Josh Smith | |
Created: 2020-03-02 | |
Purpose: Will pull all databases and containers from known CosmosDB resources. | |
Cosmos db services must be known and added to the array below (paired with the | |
associated resource group). | |
#> | |
<# add cosmos db resource and groups here as needed: #> | |
$cosmosDBServices = @( @{resource = '<cosmos db service 1>'; group = '<resource group name>'}, ` | |
@{resource = '<cosmos db service 2'; group = '<resource group name>'}) | |
$connectAz = Read-Host "Did you already connect to Azure [Y/N]?" | |
# Sadly the need to authenticate with Azure means this script needs to be run manually. | |
if ($connectAz -eq 'N'){Connect-AzAccount -subscriptionName "<name of your Azure subscription>"} | |
$dbResourceType = "Microsoft.DocumentDb/databaseAccounts/apis/databases" | |
$containerResourceType = "Microsoft.DocumentDb/databaseAccounts/apis/databases/containers" | |
$BackupStorageName = "<Azure storage account name>" | |
$StorageResourceGroupName = "<resource group for azure storage>" | |
$apiVersion = "2015-04-08" | |
$finalJson = "" | |
foreach($c in $cosmosDBServices) | |
{ | |
$ResourceName = $c.resource + "/sql/" | |
$resourceGroup = $c.group | |
$databases = Get-AzResource -ResourceType $dbResourceType -ApiVersion $apiVersion ` | |
-ResourceGroupName $resourceGroup -Name $ResourceName | ` | |
Select-Object -ExpandProperty Properties | Select-Object id | |
foreach($d in $databases) | |
{ | |
$databaseName = $d.id | |
$db = $ResourceName + $databaseName | |
$containers = Get-AzResource -ResourceType $containerResourceType ` | |
-ApiVersion $apiVersion -ResourceGroupName $ResourceGroup ` | |
-Name $db | Select-Object -ExpandProperty Properties | Select-Object id | |
foreach($con in $containers) | |
{ | |
$container = $con.id | |
$con = $null | |
$json = $null | |
$conObject = New-Object -TypeName psobject | |
$conObject | Add-Member -MemberType NoteProperty -Name ContainerName -Value $container | |
$conObject | Add-Member -MemberType NoteProperty -Name DatabaseName -Value $databaseName | |
$conObject | Add-Member -MemberType NoteProperty -Name ResourceName -Value $resourceName.Substring(0, $resourceName.Length - 5) | |
$json = $conObject | ConvertTo-Json | |
$finalJson = $finalJson + $json + ", | |
" # I'm a sucker for lazy line breaks | |
} | |
} | |
} | |
# lose the last line break and comma then output: | |
$finalJson = $finalJson.Substring(0, $finalJson.Length - 2) | |
$finalJson | Out-File -FilePath '.\CDBBackup.json' -Force | |
# connect to the blob storage and then push the file up: | |
$storageAccount = Get-AzStorageAccount -ResourceGroupName $StorageResourceGroupName ` | |
-Name $BackupStorageName | |
$storageContext = $storageAccount.Context | |
Set-AzStorageBlobContent -File '.\CDBBackup.json' -Container 'backuplist' ` | |
-Blob 'CDBBackups.json' -Context $storageContext -Force | |
# don't need that file hanging around here: | |
Remove-Item .\CDBBackup.json |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment