带有 Powershell 的 AzureTable:找不到 "ExecuteQuery" 和参数计数的重载:“1”

AzureTable with Powershell : Cannot find an overload for "ExecuteQuery" and the argument count: "1"

我想使用 PowerShell 7.1.4

从 Azure Table 存储中提取数据到 CSV 文件

这是我的 PS 脚本:

$StorageAccountName = "" 
$StorageAccountKey = "" 
$table = ""

$Ctx = New-AzureStorageContext –StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey 

$table = Get-AzureStorageTable –Name $TableName -Context $Ctx

$query = New-Object "Microsoft.WindowsAzure.Storage.Table.TableQuery" 

$query.FilterString = "(Timestamp ge datetime'2021-12-30T06:00:00Z' and Timestamp lt datetime'2021-12-30T12:00:00Z')"

$data = $table.CloudTable.ExecuteQuery($query)

我收到以下错误:

> $data = $table.CloudTable.ExecuteQuery($query)
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot find an overload for "ExecuteQuery" and the argument count: "1".

Cannot find an overload for “Insert” and the argument count: “1”.

Cannot find an overload for “ExecuteQuery” and the argument count: “1”.

当您同时加载Azure.StorageAz.Storage 模块时会出现上述错误。 DLL 文件有两个不同的版本 Microsoft.WindowsAzure.Storage.dll。在某些情况下,它会使用 Azure,而在其他情况下,它会使用 Az。问题是 Azure.Storage 模块需要查询或写入存储 table.

作为解决方法,您需要强制任何查询和实体对象使用与 Azure.Storage 模块相同版本的 Microsoft.WindowsAzure.Storage.dll 文件。您可以通过将版本信息保存到一个变量,然后在创建这些对象时指定它来实现。

您可以在下面尝试使用程序集的全名创建 $assemblySN 变量。然后,我们将其添加到 New-Object 命令以从 TableQuery class 创建查询对象。 :

$Ctx = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
$table = Get-AzureStorageTable -Name $TableName -Context $Ctx
#get the $table Assembly FullName
$assemblySN = $table.CloudTable.GetType().Assembly.FullName
#Create a table query.
$query = New-Object -TypeName  "Microsoft.WindowsAzure.Storage.Table.TableQuery,$assemblySN"
$query.FilterString = "(Timestamp ge datetime'2021-12-30T06:00:00Z' and Timestamp lt datetime'2021-12-30T12:00:00Z')"
$entities = $table.CloudTable.ExecuteQuery($query)

有关详细信息,您可以参考 blog Matthew Dowst .

更新:

如果问题仍然存在,那么您可以使用 Aztable module,例如:

$cloudTable = (Get-AzStorageTable –Name $table -Context $Ctx).CloudTable 
$data = Get-AzTableRow -table $cloudTable -customFilter "PartitionKey eq '$filedate'"