将一个blob容器数据复制到azure throught run books中的另一个blob容器中

时间:2017-07-27 11:10:56

标签: azure azure-storage azure-powershell

我编写了一个脚本,将一个blob容器数据复制到另一个blob容器中 它只复制blob名称和显示在VHD内完成不复制可以任何一个请帮助在脚本,,,

我到底想要的是什么 例如: - 存储帐户1包含3个vhds 我在同一个日志中创建了新的存储帐户,并尝试将所有vhds复制到新的存储帐户中 在脚本中,我已经传递了一些参数来复制带有日期的vhds 当我运行该脚本时,它只创建名称,但Vhds没有复制

先谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用AzCopy执行此操作:

AzCopy /source:https://[SourceStorageAccountName].blob.core.windows.net/vhds /dest:https://[DestStprageAccountName].blob.core.windows.net/vhds /sourcekey:<here-is-source-key> /destkey:<here-is-destination-key> /Pattern:[vhd-name].vhd

更多信息:https://docs.microsoft.com/en-us/azure/storage/storage-use-azcopy

如果要自动化,则可以使用Start-AzureStorageBlobCopy来使用powershell:

Select-AzureSubscription "my subscription"  

### Source VHD (West US) - anonymous access container ###
$srcUri = "http://mwwestus1.blob.core.windows.net/source/testcopy1.vhd" 

### Target Storage Account (East US) ###
$storageAccount = "mweastus1"
$storageKey = "STORAGEACCOUNTKEY"

### Create the destination context for authenticating the copy
$destContext = New-AzureStorageContext  –StorageAccountName $storageAccount `
                                        -StorageAccountKey $storageKey  

### Target Container Name
$containerName = "copiedvhds"

### Create the target container in storage
New-AzureStorageContainer -Name $containerName -Context $destContext 

### Start the Asynchronous Copy ###
$blob1 = Start-AzureStorageBlobCopy -srcUri $srcUri `
                                    -DestContainer $containerName `
                                    -DestBlob "testcopy1.vhd" `
                                    -DestContext $destContext

更多信息:https://www.opsgility.com/blog/windows-azure-powershell-reference-guide/copying-vhds-blobs-between-storage-accounts/

更新

AzCopy /来源:https://myaccount1.blob.core.windows.net/myContainer/ / Dest:https://myaccount2.blob.core.windows.net/myContainer/ / SourceKey:key1 / DestKey:key2 / Pattern:ab / SyncCopy

答案 1 :(得分:0)

根据您的描述,您希望将所有blob复制到另一个存储帐户,我们可以使用此脚本执行此操作:

将此添加到新的Runbook:

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         

    "Logging in to Azure..."
    Add-AzureRmAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}
$RGName = "vm"
$SAName = "jasondisk321"
$ConName = "vhd"
$key = "UUzQRoWeIMHzwzwJW9LxtgmwaJJS/Ac3DoXnPMHFIbUmupDpQ+KXCWG8ISJ4E20zjq7ugPtgN4vtVIv3A4m2Pg=="
$Ctx = New-AzureStorageContext -StorageAccountName $SAName -StorageAccountKey $Key
$List = Get-AzureStorageBlob -Blob * -Container $ConName -Context $Ctx
$List = $List.ICloudBlob.Uri.AbsoluteUri
$storageAccount = "jasondisk322"
$storageKey = "6lRJq6hTS1aHfVF4/iWskq/QS+tu4Jm/2zdz7Mo6AINGZOQKUiHtOAKmdZhBAWbcNEcBQq0YxZjXHgHha/iUKw=="
$destContext = New-AzureStorageContext  –StorageAccountName $storageAccount -StorageAccountKey $storageKey
$containerName = "vhd"
foreach ( $l in $list ){
$bn = ($l -split '/')[4]
Start-AzureStorageBlobCopy -srcUri $l -context $Ctx -DestContainer $containerName -DestBlob $bn -DestContext $destContext
}

如果您想在本地PC上使用powershell,我们可以使用以下脚本:

Login-AzureRmAccount
$RGName = "vm"  #source storage account resource group name
$SAName = "jasondisk321" #source storage account name
$ConName = "vhd"  #source container name
$key = "UUzQRoWeIMHzwzwJW9LxtgmwaJJS/Ac3DoXnPMHFIbUmupDpQ+KXCWG8ISJ4E20zjq7ugPtgN4vtVIv3A4m2Pg=="#source storage account key
$Ctx = New-AzureStorageContext -StorageAccountName $SAName -StorageAccountKey $Key
$List = Get-AzureStorageBlob -Blob * -Container $ConName -Context $Ctx
$List = $List.ICloudBlob.Uri.AbsoluteUri
$storageAccount = "jasondisk322"#destination storage account name
$storageKey = "6lRJq6hTS1aHfVF4/iWskq/QS+tu4Jm/2zdz7Mo6AINGZOQKUiHtOAKmdZhBAWbcNEcBQq0YxZjXHgHha/iUKw=="#destination storage account key
$destContext = New-AzureStorageContext  –StorageAccountName $storageAccount -StorageAccountKey $storageKey
$containerName = "vhd"#destination container name
foreach ( $l in $list ){
$bn = ($l -split '/')[4]
Start-AzureStorageBlobCopy -srcUri $l -context $Ctx -DestContainer $containerName -DestBlob $bn -DestContext $destContext
}