Hi,
This is the last series in blog posts regarding the automation of backups, purging and restoring azure blobs.
Below is a PowerShell script that can take a file containing the contents of snapshot urls, it also supports the log file output from the backup restore script and just pasting that output in the event you want to restore a complete backup set.
Remember, when using the backup script, ALWAYS save the output of the script to use as a reference so that you have the URL’s of the snapshots you want to restore.
e.g. Sample restore.txt file.
[05:01:08]: [Publishing internal artifacts] Sending build.start.properties.gz file
[05:01:05]: Step 1/2: Command Line (14s)
[05:01:05]: [Step 1/2] in directory: C:\TeamCity\buildAgent\work\d9375448b88c1b75\Maintenance
[05:01:08]: [Step 1/2] Starting snapshot uniqueids
[05:01:08]: [Step 1/2] Found blob container uniqueids
[05:01:09]: [Step 1/2] https://uatmystory.blob.core.windows.net/uniqueids/agencies?snapshot=2012-04-22
[05:01:09]: [Step 1/2] T19:01:10.6488549Z
[05:01:09]: [Step 1/2] https://uatmystory.blob.core.windows.net/uniqueids/agency1-centres?snapshot=201
[05:01:09]: [Step 1/2] 2-04-22T19:01:10.8818083Z
[05:01:09]: [Step 1/2] https://uatmystory.blob.core.windows.net/uniqueids/agency1-clients?snapshot=201
[05:01:09]: [Step 1/2] 2-04-22T19:01:11.0257795Z
[05:01:09]: [Step 1/2] https://uatmystory.blob.core.windows.net/uniqueids/agency1-referrals?snapshot=2
[05:01:09]: [Step 1/2] 012-04-22T19:01:11.1717503Z
So the script will parse any restore file and just find URI’s in it, and then restore them.
#requires -version 2.0 param ( [parameter(Mandatory=$true)] [string]$AzureAccountName, [parameter(Mandatory=$true)] [string]$AzureAccountKey, [parameter(Mandatory=$true)] [string]$FileContainingSnapshotAddresses ) $ErrorActionPreference = "Stop" if ((Get-PSSnapin -Registered -Name AzureManagementCmdletsSnapIn -ErrorAction SilentlyContinue) -eq $null) { throw "AzureManagementCmdletsSnapIn missing. Install them from Https://www.cerebrata.com/Products/AzureManagementCmdlets/Download.aspx" } Add-PSSnapin AzureManagementCmdletsSnapIn -ErrorAction SilentlyContinue Add-Type -Path 'C:\Program Files\Windows Azure SDK\v1.6\ref\Microsoft.WindowsAzure.StorageClient.dll' $cred = New-Object Microsoft.WindowsAzure.StorageCredentialsAccountAndKey($AzureAccountName,$AzureAccountKey) $client = New-Object Microsoft.WindowsAzure.StorageClient .CloudBlobClient("https://$AzureAccountName.blob.core.windows.net",$cred) function RestoreSnapshot { param ( $snapShotUri) Write-Host "Parsing snapshot restore for $SnapShotUri" $regex = new-object System.Text.RegularExpressions.Regex("http://.*?/(devstoreaccount1/)?(?<containerName>.*?)/.*") $match = $regex.Match($snapShotUri) $container = $match.Groups["containerName"].Value $parsedUri = $match if($match.Value -eq "") { return } if ($container -eq $null) { Write-Host "Container $blobContainerName doesn't exist, skipping snapshot restore" } else { Write-Host "Restoring $snapShotUri" Copy-Blob -BlobUrl $parsedUri -AccountName $AzureAccountName -AccountKey $AzureAccountKey -TargetBlobContainerName $container Write-Host "Restore snapshot complete for $parsedUri" } } $fileContent = Get-Content $FileContainingSnapshotAddresses foreach($uri in $fileContent) { RestoreSnapshot $uri }
One thought on “Automate #WindowsAzure snapshot restores”