azure之如何使用 PowerShell 在 Azure 存储表中插入行

落叶无声 阅读:39 2024-11-01 17:39:52 评论:0

我很高兴找到 New-AzureStorageTable cmdlet,但我还没有弄清楚如何在表中插入新行。

我在互联网上找到了以下代码,但CloudTable.Execute似乎失败了。

它需要三个参数,如 http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.cloudtable.execute(v=azure.10).aspx 中所述。但我不知道如何调用该方法。

任何想法都值得赞赏!

function InsertRow($table, [String]$partitionKey, [String]$rowKey, [int]$intValue) 
{ 
  $entity = New-Object "Microsoft.WindowsAzure.Storage.Table.DynamicTableEntity" $partitionKey, $rowKey 
  $entity.Properties.Add("IntValue", $intValue) 
  $result = $table.CloudTable.Execute([Microsoft.WindowsAzure.Storage.Table.TableOperation]::Insert($entity)) 
} 
 
$StorageAccountName = "MyAccountName" 
$StorageAccountKey = "MyAccountKey" 
 
$context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey 
$table = New-AzureStorageTable test -Context $context 
 
for ($p = 1; $p -le 10; $p++) 
{ 
  for ($r = 1; $r -le 10; $r++) 
  { 
    InsertRow $table "P$p" "R$r" $r 
  } 
} 

更新

按照下面的建议,您必须首先使用 Get-AzureStorageTable 检查该表是否已存在。

$tablename = "test" 
$table = Get-AzureStorageTable $tablename -Context $context -ErrorAction Ignore 
if ($table -eq $null) 
{ 
    New-AzureStorageTable $tablename -Context $context 
} 

请您参考如下方法:

这是仅使用存储客户端库 ( Microsoft.WindowsAzure.Storage.dll ) 的替代实现。

#Insert row ... here $table is an object of type CloudTable 
function InsertRow($table, [String]$partitionKey, [String]$rowKey, [int]$intValue) 
{ 
  $entity = New-Object "Microsoft.WindowsAzure.Storage.Table.DynamicTableEntity" $partitionKey, $rowKey 
  $entity.Properties.Add("IntValue", $intValue) 
  $result = $table.Execute([Microsoft.WindowsAzure.Storage.Table.TableOperation]::Insert($entity)) 
} 
 
 
$StorageAccountName = "accountname" 
$StorageAccountKey = "accountkey" 
$tableName = "MyTable3" 
 
#Create instance of storage credentials object using account name/key 
$accountCredentials = New-Object "Microsoft.WindowsAzure.Storage.Auth.StorageCredentials" $StorageAccountName, $StorageAccountKey 
 
#Create instance of CloudStorageAccount object 
$storageAccount = New-Object "Microsoft.WindowsAzure.Storage.CloudStorageAccount" $accountCredentials, $true 
 
#Create table client 
$tableClient = $storageAccount.CreateCloudTableClient() 
 
#Get a reference to CloudTable object 
$table = $tableClient.GetTableReference($tableName) 
 
#Try to create table if it does not exist 
$table.CreateIfNotExists() 
 
for ($p = 1; $p -le 10; $p++) 
{ 
  for ($r = 1; $r -le 10; $r++) 
  { 
    InsertRow $table "P$p" "R$r" $r 
  } 
} 

更新

我刚刚尝试了上面的代码,它工作得很好 if the table does not exist in storage 。如果我尝试为存储中已存在的表运行此脚本,我能够重现您遇到的错误。我认为这就是正在发生的事情:当您调用New-AzureStorageTable时创建一个表,如果该表已经存在,那么它会抛出一个错误并返回 null值为 $table变量,然后当您尝试执行 InsertRow 时使用此功能 null有值(value)$table变量,您会在 Execute 上收到错误功能。理想的New-AzureStorageTable如果表已经存在,则不应出错。


标签:Shell
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号