If you ever need to copy VHDs between two different storage account, you can use the PowerShell script below to do it in few steps:
Perform the copy
Firstly select the subscription you need to work with.
Select-AzureSubscription "MySubscriptionName"
Define the source VHD - authenticated container. You can get the vhd name and url from the portal
$srcUri = "https://mysubscription.blob.core.windows.net/vhds/yourvhdname.vhd"
Define the source Storage Account. This is where the vhd is currently located. The Private key can be acquired from the azure portal
$srcStorageAccount = "sourceStorageAccount"
$srcStorageKey = "GET KEY FROM PORTAL"
Define the destination Storage Account. This is where the vhd will be copied to. Again, the private key can be acquired from the azure portal
$destStorageAccount = "destinationStorageAccount"
$destStorageKey = "GET KEY FROM PORTAL"
Create the source storage account context
$srcContext = New-AzureStorageContext `
-StorageAccountName $srcStorageAccount `
-StorageAccountKey $srcStorageKey
Create the destination storage account context
$destContext = New-AzureStorageContext `
-StorageAccountName $destStorageAccount `
-StorageAccountKey $destStorageKey
Define the destination Container Name
$containerName = "vhds"
Create the container on the destination
New-AzureStorageContainer -Name $containerName -Context $destContext
Start the asynchronous copy - specify the source authentication with -SrcContext
$blob1 = Start-AzureStorageBlobCopy `
-srcUri $srcUri `
-SrcContext $srcContext `
-DestContainer $containerName `
-DestBlob "DestinationVhdName.vhd" `
-DestContext $destContext
Checking the status of the copy
The script below can be used to retrieve the status of the copy operation. First we define a $status variable and then we loop until the status changes to non-pending. This variable is also used to display/print the current status on the console.
Retrieve the current status of the copy operation
$status = $blob1 | Get-AzureStorageBlobCopyState
Print out status
$status
While($status.Status -eq "Pending"){
$status = $blob1 | Get-AzureStorageBlobCopyState
Start-Sleep 10
$status
}
Happy coding...