带有 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.Storage
和Az.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'"
我想使用 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.Storage
和Az.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'"