在Get-AzTableTable之后立即调用Get-AzTableRow时,来自AzureRmStorageTableCoreHelper.psm1的“未找到”异常

时间:2019-05-03 21:59:25

标签: azure azure-table-storage azure-powershell

我有一个PowerShell脚本,在其中我依次调用Get-AzTableTable,Get-AzTableRow和Add-AzTableRow。有时(但并非总是如此),我从Get-AzTableRow中收到以下错误:

Exception calling "Execute" with "1" argument(s): "Not Found"
At C:\Program Files\WindowsPowerShell\Modules\AzTable\2.0.2\AzureRmStorageTableCoreHelper.psm1:239 char:10
+ ...      return ($Table.Execute([Microsoft.Azure.Cosmos.Table.TableOperat ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : StorageException

这似乎仅在表不存在时才发生。我认为发生了什么事,就是Get-AzTableTable异步创建了它(通过$ Table.CreateIfNotExistsAsync()),我在创建表之前就调用了Get-AzTableRow。

该问题的解决方案是什么?在检查行是否存在之前,如何确保已创建表?

1 个答案:

答案 0 :(得分:0)

在使用$Table.CreateIfNotExistsAsync()创建表之后,您可以仅使用循环(如while)来确定表是否存在。

示例代码如下:

#create the table using $Table.CreateIfNotExistsAsync()

#here check if the table create or not
# Since I cannot see all your code, note that if $Table does not have a method Exists(), you can try use $Table.CloudTable.Exists()
while(!($Table.Exists()))
{
Start-Sleep -Seconds 2; 
Write-Output "the table does not create, please wait."
}

#if the table exists, you can do other operation.