我正在尝试将存储帐户内的所有容器复制到另一个存储帐户上的单个容器中。我已经在我自己的机器上完成了这项工作,没有任何问题,但我想使用 Azure 自动化来自动化它。
当运行一个标准的 powershell 脚本时,所有的异步调用都是同步发生的。为了解决这个问题,我尝试添加“Powershell Workflow”运行手册。问题是我有几个调用 Azure 存储命令需要一个AzureStorageContext
. 问题是我无法将上下文绑定到任何东西,因为它将被序列化为字符串。
我有以下代码:
$destinationContext = (New-AzureStorageContext -StorageAccountName $destinationAccountName -StorageAccountKey $destinationAccountKey)
$sourceContext = (New-AzureStorageContext -StorageAccountName $prodAccountName -StorageAccountKey $prodAccountKey)
$allContainers = Get-AzureStorageContainer -Context $sourceContext
$startTime = Get-Date -Format "yyyyMMddhhmmss"
foreach ($container in $allContainers.Name)
{
$allBlobs = (Get-AzureStorageBlob -Container $container -Context $sourceContext).Name
foreach -Parallel ($blob in $allBlobs)
{
$fileName = $startTime + "/" + $container + "/" + $blob
Write-Information "Copying $fileName"
Start-AzureStorageBlobCopy -SrcBlob $blob -DestBlob $fileName -SrcContainer $container -Context $sourceContext -DestContext $destinationContext -DestContainer $destinationContainer
}
}
一个标准的解决方法是使用一个InlineScript
块来处理任何需要上下文对象的东西。但是,如果我这样做,我将失去并行复制 blob 的能力。
有什么方法可以在 Azure 自动化上执行此操作,同时仍然并行启动所有 blob 的复制命令?