Skip to content

Instantly share code, notes, and snippets.

@comitieutu
Created July 22, 2020 09:14
Show Gist options
  • Save comitieutu/050017563254458f2454ce2b5ef37032 to your computer and use it in GitHub Desktop.
Save comitieutu/050017563254458f2454ce2b5ef37032 to your computer and use it in GitHub Desktop.
Copy blobs from source container to destination container by powershell
#Server side storage copy
$SourceStorageAccount = "SourceStorageAccount"
$SourceStorageKey = "xysrvAjcX5vVZ6XicUBaJlRRCoMHEuX3OYO0/zCyhoQxSrJtW9EeSt2BTbSrXOsvJgtcjP/xTXRRZvpEhkm9Yg=="
$DestStorageAccount = "DestStorageAccount"
$DestStorageKey = "Npb0KXlbW/BhTCuvN/3SSw3UhNlv66MTmQaoNmsj/aanfGJnqsHGxRcwABXXRH1E4MxLg4fh7S5QUHRCo5FuBQ=="
$SourceStorageContext = New-AzureStorageContext -StorageAccountName $SourceStorageAccount -StorageAccountKey $SourceStorageKey
$DestStorageContext = New-AzureStorageContext -StorageAccountName $DestStorageAccount -StorageAccountKey $DestStorageKey
$Containers = Get-AzureStorageContainer -Context $SourceStorageContext
foreach($Container in $Containers)
{
$ContainerName = $Container.Name
if (!((Get-AzureStorageContainer -Context $DestStorageContext) | Where-Object { $_.Name -eq $ContainerName }))
{
Write-Output "Creating new container $ContainerName"
New-AzureStorageContainer -Name $ContainerName -Permission Off -Context $DestStorageContext -ErrorAction Stop
}
$Blobs = Get-AzureStorageBlob -Context $SourceStorageContext -Container $ContainerName
$BlobCpyAry = @() #Create array of objects
#Do the copy of everything
foreach ($Blob in $Blobs)
{
$BlobName = $Blob.Name
Write-Output "Copying $BlobName from $ContainerName"
$BlobCopy = Start-CopyAzureStorageBlob -Context $SourceStorageContext -SrcContainer $ContainerName -SrcBlob $BlobName -DestContext $DestStorageContext -DestContainer $ContainerName -DestBlob $BlobName
$BlobCpyAry += $BlobCopy
}
#Check Status
foreach ($BlobCopy in $BlobCpyAry)
{
#Could ignore all rest and just run $BlobCopy | Get-AzureStorageBlobCopyState but I prefer output with % copied
$CopyState = $BlobCopy | Get-AzureStorageBlobCopyState
$Message = $CopyState.Source.AbsolutePath + " " + $CopyState.Status + " {0:N2}%" -f (($CopyState.BytesCopied/$CopyState.TotalBytes)*100)
Write-Output $Message
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment