使用 powershell 在 Azure 中不同订阅的存储容器之间复制 blob

Posted

技术标签:

【中文标题】使用 powershell 在 Azure 中不同订阅的存储容器之间复制 blob【英文标题】:Copy blobs between storage containers in different subscriptions in Azure using powershell 【发布时间】:2021-12-04 14:08:57 【问题描述】:

我正在尝试使用 powershell 将过去 24 小时内创建的 blob 从一个存储帐户复制到另一个位于不同订阅中的存储帐户。我想使用 Azure 自动化来自动执行此操作,但在选择订阅上下文时遇到了问题。它允许我在任何时候只选择一个订阅上下文,并且由于“副本”指向不同的订阅,脚本失败了。非常感谢任何输入,以下是我的脚本。


Select-AzSubscription -SubscriptionId $AzureSubscriptionId1

# Get Source Storage Account

$SrcStorage = Get-AzStorageAccount -name $SrcStorageAccountName -ResourceGroupName $SrcStorageAccountRG

Select-AzSubscription -SubscriptionId $AzureSubscriptionId2

# Get Target Storage Account
$TgtStorage = Get-AzStorageAccount -name $TgtStorageAccountName -ResourceGroupName $TgtStorageAccountRG

$Days = 1

Get-AzureStorageBlob -Container $SrcStorageContainerName -Context $SrcStorage.Context | Where-Object  $_.LastModified.DateTime -gt ((Get-Date).AddDays(-$Days))  |  Start-AzureStorageBlobCopy -DestContainer $TgtStorageContainerName -DestContext $TgtStorage.Context

【问题讨论】:

请编辑您的问题并包含您遇到的错误。 【参考方案1】:

    在此处从微软网站下载AzCopy 工具:https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-v10

    AZCopy 支持本地驱动器、azure blob 甚至 AWS 之间的数据复制。

    AZCopy 具有以下语法: azcopy copy [source] [destination] [flags]

    登录到源位置的 AZCopy。

    azcopy login

    为目标位置生成 SAS 令牌(确保您授予写入权限)

    运行命令 AZCopy(请在一行中使用一个命令)

    azcopy cp "https://[source-account].blob.core.windows.net/[container]/[path/to/blob]" "https://[destination-account].blob.core.windows.net/[container]/[path/to/directory]?[SAS]"

【讨论】:

Azcopy 不能在 Azure 自动化 Runbooks 中使用【参考方案2】:

我能够更正我的代码。问题是我如何引用存储上下文而不是因为多个订阅。这是工作代码。

Select-AzSubscription -SubscriptionId $Subscription1

# Get Source Storage Account Context

$StorageAccountContext = New-AzureStorageContext -StorageAccountName $SrcStorageAccountName -StorageAccountKey 'ABC'

Select-AzSubscription -SubscriptionId $Subscription2

# Get Target Storage Account Context

$TgtStorageAccountContext = New-AzureStorageContext -StorageAccountName $TgtStorageAccountName -StorageAccountKey 'DEF'
$Days = 2


Get-AzureStorageBlob -Container $SrcStorageContainerName -Context $StorageAccountContext | Where-Object  $_.LastModified.DateTime -gt ((Get-Date).AddDays(-$Days))  |  Start-AzureStorageBlobCopy -DestContainer $TgtStorageContainerName -DestContext $TgtStorageAccountContext -Force

【讨论】:

以上是关于使用 powershell 在 Azure 中不同订阅的存储容器之间复制 blob的主要内容,如果未能解决你的问题,请参考以下文章

使用 PowerShell 自动登录Azure

使用 PowerShell 自动登录 Azure

Azure 基础:用 PowerShell 自动登录

使用 powershell 将两个 azure blob 合并为单个 blob

Azure devops powershell 任务问题

从 Azure DevOps 管道启动适用于 VS 2019 的开发人员 PowerShell