使用PowerShell复制Azure存储表时遇ExecuteQuerySegmentedAsync报错
错误原因分析
错误InvalidOperation: Method invocation failed because [System.String] does not contain a method named 'ExecuteQuerySegmentedAsync'的核心问题是:Get-AzTableRowAll和Add-AzTableRow需要接收CloudTable对象作为-Table参数,但脚本里传递的是字符串类型的表名($sourcetablename、$desttablename),而非之前通过Get-CloudTable函数获取的$sourceTable和$destinationTable对象。
修复后的完整脚本
#Set Variables to define source and destination values $sourcestorageaccountname = "stlpttoragetst" $sourceresourcegroupname = "RG_SUPPLY__ADF_TEST_AUE" $destinationstorageaccountname = "stlpestorage" $destinationresourcegroupname = "RG_SUPPLY_DEV_AUE" $sourcetablename = "DataConfig" $desttablename = "TestTable" #Get storage account keys $sourcestorageaccount = Get-AzStorageAccount -ResourceGroupName $sourceresourcegroupname -Name $sourcestorageaccountname $destinationstorageaccount = Get-AzStorageAccount -ResourceGroupName $destinationresourcegroupname -Name $destinationstorageaccountname $sourcekey = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$g==" $destinationkey = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" #Function to create CloudTable reference function Get-CloudTable { param ( [string]$accountName, [string]$accountKey, [string]$tableName ) $storageContext = New-AzStorageContext -StorageAccountName $accountName -StorageAccountKey $accountKey #Get Cloud Table Reference $table = Get-AzStorageTable -Name $tableName -Context $storageContext return $table } #Get Source table and Destination table reference $sourceTable = Get-CloudTable -accountName $sourcestorageaccountname -accountKey $sourcekey -tableName $sourceTablename $destinationTable = Get-CloudTable -accountName $destinationstorageaccountname -accountKey $destinationkey -tableName $desttablename #Copy Entity from Source Table to Destination table $entities = Get-AzTableRowAll -Table $sourceTable foreach ($entity in $entities){ #Insert or replace entity in destination table $insertOperation = Add-AzTableRow -Table $destinationTable -PartitionKey $entity.PartitionKey -RowKey $entity.RowKey -Property $entity.Properties } Write-Output "Table Copied Completed"
关键修复点
- 将
Get-AzTableRowAll -table $sourcetablename改为Get-AzTableRowAll -Table $sourceTable,传递正确的CloudTable对象 - 将
Add-AzTableRow -Table $desttablename改为Add-AzTableRow -Table $destinationTable,同样传递CloudTable对象而非字符串表名 - 统一参数名大小写(
-partitionKey→-PartitionKey、-property→-Property),符合PowerShell参数规范
内容的提问来源于stack exchange,提问作者esngsrj
相关产品推荐
相关产品推荐

