【问题标题】:Copy blobs between storage containers in different subscriptions in Azure using powershell使用 powershell 在 Azure 中不同订阅的存储容器之间复制 blob
【发布时间】: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

【问题讨论】:

  • 请编辑您的问题并包含您遇到的错误。

标签: azure powershell azure-blob-storage azure-automation


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

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

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

  4. 登录到源位置的 AZCopy。

    azcopy login

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

  6. 运行命令 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

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 2020-12-19
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2023-04-06
    • 2021-01-04
    • 2017-07-21
    相关资源
    最近更新 更多