我正在尝试使用这些PoserShell命令获取Azure存储表中的所有行:
$saContext = (AzureRmStorageTable\Get-AzureRmStorageAccount -Name $storageAccount -ResourceGroupName $resourceGroup).Context
$table = Get-AzureStorageTable -Name $tableName -Context $saContext
Get-AzureStorageTableRowAll -table $table
但它会返回此错误:
Cannot find an overload for "ExecuteQuery" and the argument count: "1".
At C:\Program Files\WindowsPowerShell\Modules\AzureRmStorageTable\1.0.0.17\AzureRmStorageTableCoreHelper.psm1:305 char:6
+ $result = $table.CloudTable.ExecuteQuery($tableQuery)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
我甚至使用了这些命令行,但所有命令都会返回相同的错误:
#Get-AzureStorageTableRowByColumnName -columnName "Average" -operator Equal -table $table -value 3228132966.4
#Get-AzureStorageTableTable -resourceGroup $resourceGroup -storageAccountName $storageAccount -tableName $tableName
#Get-AzureStorageTableRowAll -table $table | ft
#Get-AzureStorageTableRowByPartitionKey -table $table –partitionKey “I-Used-One-Of-My-Partition-Keys-From-Table” | ft
您知道如何使用PowerShell在Azure存储表中获取一行吗?
实际上,我已经从here安装了AzureRmStorageTable
。
答案 0 :(得分:1)
我发现该错误是由于AzureRmStorageTable V1.0.0.17中的某些问题。 我已将其更新到V1.0.0.20,现在它正在运行。 在V1.0.0.20的文档中,他们写道: '实施了一些措施,以避免不同程序集版本之间发生冲突,更具体地说是Microsoft.WindowsAzure.Storage.Dll。'
我无法记住默认情况下在Runbook上安装了哪个版本,无论如何,如果您更新它将会有效。
由于
答案 1 :(得分:1)
这是在PowerShell模块Azure.Storage和AzureRm.Storage中区分dll版本的结果。 AzureRm.Storage的旧版本的Microsoft.WindowsAzure.Storage.dll比Azure.Storage中的版本低,并且缺少功能。一旦两个程序集都被加载,那么告诉powershell使用哪个程序集并不是一个好方法。
在此处查看问题: https://github.com/Azure/azure-powershell/issues/5030
我可以想到三个解决方法:
1)如链接中所述,您可以使用New-Object创建指定程序集版本的powershell对象。 E.g:
$ctx = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $key
$sasToken = New-AzureStorageTableSASToken -Context $ctx -Permission a -Name $StorageTableName
$sasURI = $ctx.TableEndpoint + $StorageTableName + $sasToken
$cloudTable = New-Object -typename "Microsoft.WindowsAzure.Storage.Table.CloudTable, Microsoft.WindowsAzure.Storage, Version=8.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" -ArgumentList $sasURI
2)在powershell中创建一个编译类来处理直接的.net交互。 命令Add-Type创建您的类,您可以在-ReferencedAssemblies参数中引用正确的dll。这里有一个简单的powerhell c#示例:http://activedirectoryfaq.com/2016/01/use-net-code-c-and-dlls-in-powershell/。这个选项最适合我。
3)将较新版本的Microsoft.WindowsAzure.Storage.dll从Azure.Storage模块目录复制到AzureRm.Storage模块目录。这显然是一个脆弱的选择,但可能是最简单的快速修复。
答案 2 :(得分:0)
这是使用新的Az命令获取所有行的答案,需要 AzTable 模块。
$storageAccountName = "name"
$storageAccountKey = "key=="
$context = New-AzStorageContext $storageAccountName -StorageAccountKey $storageAccountKey
$cloudTable = (Get-AzStorageTable –Name "table_name" –Context $context).CloudTable
Get-AzTableRow -Table $cloudTable
使用过滤器检索行
[string]$filter = "Timestamp lt datetime'2019-05-27T13:58:04.0587693+02:00'"
Get-AzTableRow -Table $cloudTable -CustomFilter $filter
来自Azure https://docs.microsoft.com/bs-latn-ba/azure/storage/tables/table-storage-how-to-use-powershell的更多内容