我们如何将 azure 存储帐户 table 复制到另一个存储帐户?

how do we copy an azure storage account table to another storage account?

我正在尝试将我的存储 table 克隆到不同的存储帐户中。使用 powershell 执行此操作的最佳方法是什么?

我尝试了 this 解决方案;然而,在这一点上我得到了这个例外:

Copy-AzureStorageTable : The term 'Copy-AzureStorageTable' is not recognized as the name of a cmdlet, function, script file, or operable program. Check  the spelling  of the 
name, or if a path was included, verify that the path is correct and try again.

我们如何将 table 复制到另一个存储帐户?

很遗憾,AzCopy v10 不支持 Azure Table 存储。要export/import 数据from/to Azure Table 存储,您需要使用AzCopy v7.3 代替。

注意不支持直接Table复制到Table,需要导出源table到本地首先是磁盘或 Blob 存储,然后将其导入另一个目的地 table.

我们已经编写了下面的 PowerShell 脚本,它将存储帐户下的所有 tables 下载到您的本地,并将上传到工作正常的目标存储帐户。

这是 PowerShell 脚本:

Connect-azaccount
$strgName='<storageAccountName>'
$stcontext=New-AzStorageContext -StorageAccountName $strgName -StorageAccountKey <StorageAccountKey>

$tablelist=Get-AzStorageTable -Context $stcontext | Select-Object -Property Uri,Name


foreach($table in $tablelist){
   
   $Sourceuri=$table.Uri

    cd "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy"

  .\AzCopy /Source:$Sourceuri /Dest:C:\Users\Downloads\azcopy1 /SourceKey:<StorageAccountKey>
   
}

$localist=Get-ChildItem -Path C:\users\Downloads\azcopy1\  -Exclude *.json
foreach( $item in $localist){

$tbname=$item.Name.Replace('<storageaccountName>_','').Replace('.manifest','').Replace('_','').Replace('.','')

$manifest=$item.Name.Replace('C:\users\Downloads\azcopy1\','')

 cd "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy" `

.\AzCopy /Source:C:\users\Downloads\azcopy\ /Dest:https://<DestinationStorageAccount>.table.core.windows.net/$tbname/ /DestKey:<DestinationAccountKey> /Manifest:$manifest /EntityOperation:InsertOrReplace

}

这里是供参考的输出: