繁体   English   中英

使用Powershell脚本将表部署到Azure表存储时出错

[英]Error while deploying the tables using powershell script into Azure table storage

我正在运行以下脚本,并使用VSTS powershell任务中的arguments部分通过powershell脚本传递$ fileObj的脚本参数。我正在尝试将表数据部署到Azure表存储中。 我将表数据保存在.csv文件中,并且尝试使用Powershell脚本部署这些表实体并将其部署到Azure表存储中。以下脚本未部署表实体并且失败并出现错误。 谁能帮我一下。 我已将错误日志附加到一个驱动器位置: https ://onedrive.live.com/ ? authkey =% 21AEh2aAAOnbmuzq9U &cid= 5599285D52BD31F3 & id = 5599285D52BD31F3%21900 & parId = root & action = locate

foreach($fo in $fileObj){
 Write-Host $fo.filepath
 $csv = Import-CSV $fo.filepath
  $cArray=$fo.Cols.split(",")
  foreach($line in $csv)
    {
    Write-Host "$($line.partitionkey), $($line.rowKey)"
    $entity = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.DynamicTableEntity -ArgumentList $line.partitionkey, $line.rowKey 
        foreach($c in $cArray){
     Write-Host "$c,$($line.$c)"
 $entity.Properties.Add($c,$line.$c)
 }
 $result = $table.CloudTable.Execute([Microsoft.WindowsAzure.Storage.Table.TableOperation]::Insert($entity))
 }
}

$subscriptionName = ""
$resourceGroupName = ""
$storageAccountName = ""
$location = ""

# Get the storage key for the storage account
$StorageAccountKey = ""

# Get a storage context
$ctx = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey

根据您提到的日志,我发现您的csv列名称似乎与您的代码不对应。 并且您的CSV文件格式带有2个名为Partitionkey和Rowkey的Colunms是不正确的。 请尝试使用以下演示代码和csv文件格式。 它在我这边正常工作。

$resourceGroup ="resourceGroup name"
$storageAccount = "storage account Name"
$tableName = "table name"
$storageAccountKey = "storage key"
$ctx = New-AzureStorageContext -StorageAccountName $storageAccount -
StorageAccountKey $storageAccountKey 

######### Add removing table and create table code #######
try
{
    Write-Host "Start to remove table $tableName, please wait a moment..."

    Remove-AzureStorageTable -Name $tableName -Context $ctx -Force # Remove the Azure table

    Start-Sleep -Seconds 60 # waiting for removing table, you could change it according to your table 

    Write-Host "$tableName table has been removed"
}
catch
{
   Write-Host "$tableName is not existing"
}
Write-Host "Start to create $tableName table"

New-AzureStorageTable -Name  $tableName -Context $ctx  # Create new azure storage table

##########Add removing table and create table code ############

$table = Get-AzureStorageTable -Name $tableName -Context $ctx 
$csvPath ='csv file path'
$cols = "Label_Usage,Label_Value,Usage_Location" #should be corrensponding to your csv column exclude Partitionkey and RowKey
$csv = Import-Csv -Path $csvPath
$number = 0
[Microsoft.WindowsAzure.Storage.Table.TableBatchOperation]$batchOperation = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.TableBatchOperation
foreach($line in $csv)
{ 
     $number++
     $entity = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.DynamicTableEntity -ArgumentList $line.partitionkey, $line.rowKey 
     $colArray = $cols.split(",")
     Write-Host "$($line.partitionkey), $($line.rowKey)" #output partitionkey and rowKey value
     foreach($colName in $colArray)
     {
         Write-Host "$colName,$($line.$colName)" #output column name and value
        $entity.Properties.Add($colName,$line.$colName)
     }
    if($number -le 100)
    {
        $batchOperation.InsertOrReplace($entity) # Changed code
    }
    else
    {   $number =0
        $result = $table.CloudTable.ExecuteBatch($batchOperation)
   [Microsoft.WindowsAzure.Storage.Table.TableBatchOperation]$batchOperation = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.TableBatchOperation
    }
}
if($batchOperation.Count -ne 0)
{
 $result = $table.CloudTable.ExecuteBatch($batchOperation)
}

注意:对于批处理操作,要求CSV文件中的记录具有相同的分区键值


csv文件示例格式

在此处输入图片说明

测试结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM