使用 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的主要内容,如果未能解决你的问题,请参考以下文章