Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <#
- This script will call the cosmos db migration tool with the correct parameters based
- on a list of databases that need to be backed up. It depends on a json param file that
- contains the list of cosmos db services that have databases that require backup.
- This script has a couple of dependencies:
- (1) the dt.exe that it runs (the cosmos db migration tool and we assume the associated files/dlls
- in the compiled folder) needs to be locally available.
- (2) A configured json file to list out the cosmos services and databases that require backups.
- Care should be taken (encrypt the file and provide access to the keys to a limited set of users)
- as the read-only keys for the cosmos-db service will be stored here.
- #>
- $retentionDays = 14
- $backupList = "C:\temp\CosmosBackup.json" # point these at the appropriate folders
- $backupPath = 'C:\temp\'
- $pathtoEXE = 'C:\temp\drop\dt.exe'
- $backups = Get-Content -Raw -Path $backupList | ConvertFrom-Json
- foreach($s in $backups.service)
- {
- $sName = $s.name
- Write-Output "Processing service $sName..."
- $cosmosConnectString = $s.connectString
- foreach($d in $s.databases)
- {
- $database = $d.name
- if ($d.backupFlag -eq $true)
- {
- Write-Output " Backing up collections in $database..."
- foreach($c in $d.collections)
- {
- $collection = $c.name
- Write-Output " Backing up collection $collection."
- <# configure export arguments #>
- $connectString = "$cosmosConnectString;Database=$database"
- $date = Get-Date
- $dateString = $date.ToString('yyyyMMdd')
- $dateString = $dateString + '_' + $date.ToString('hhmm')
- $targetFile = "$collection`_$dateString.json"
- $args = "/ErrorLog:" + "$backupPath\backups\$sName\$database\$collection`_$dateString`_log.csv /OverwriteErrorLog"
- $args = $args + " /ErrorDetails:Critical /s:DocumentDB /s.ConnectionString:$connectString"
- $args = $args + " /s.ConnectionMode:Gateway /s.Collection:$collection /s.Query:`"SELECT * FROM c`""
- $args = $args + " /t:JsonFile /t.File:$backupPath\backups\$Name\$database\$targetFile /t.Prettify /t.Overwrite"
- <# now we are all configured: run the collection backup #>
- Start-Process -FilePath $pathtoEXE -ArgumentList $args -Wait
- }
- }
- else {
- Write-Output " Skipping $dName backupFlag <> true."
- }
- }
- }
- $purgeDate = (Get-Date).AddDays(-1 * ($retentionDays + 1))
- <# remove old logs and backups #>
- Get-ChildItem -Path $backupPath -Recurse -Include *.json -Exclude *cosmosBackup.json | Where-Object {$_.CreationTime -lt $purgeDate} | Remove-Item
- Get-ChildItem -Path $backupPath -Recurse -Include *.csv | Where-Object {$_.CreationTime -lt $purgeDate} | Remove-Item
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement