如何使用PowerShell获取Azure存储表中的一行?
我试图让使用这些PoserShell的Azure存储表中的所有行命令:如何使用PowerShell获取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
。
我发现该错误是由于AzureRmStorageTable V1.0.0.17中的某个问题。 我已将它更新到V1.0.0.20,现在正在运行。 在V1.0.0.20的文档中,他们写道: '实施了一些措施以避免不同程序集版本之间的冲突,更具体地说是Microsoft.WindowsAzure.Storage.Dll。'
我不记得默认情况下在Runbook上安装了哪个版本,无论如何,它会在你更新它的时候工作。
由于
谢谢!我查看了代码并找出了错误。似乎PowerShell在'CloudTable'(可能来自Azure资源管理器)和'AzureStorageTable'(可能来自经典Azure)之间混淆,因为我们遇到了错误。如果你输入'[appdomain] :: currentdomain.getassemblies()',你会注意到'Microsoft.WindowsAzure.Storage'有两个不同版本的文件。这导致东西打破...再次感谢很多! –
这是differering在模块的powershell和Azure.Storage AzureRm.Storage DLL版本的结果。 AzureRm.Storage具有比Azure.Storage中的版本更早的Microsoft.WindowsAzure.Storage.dll版本,并且缺少功能。一旦加载了这两个程序集,就没有一个很好的方式告诉PowerShell使用哪一个。
看到这里的问题: https://github.com/Azure/azure-powershell/issues/5030
我能想到的三种解决方法:在链接中提到
1),你可以使用新的对象来创建PowerShell的对象指定程序集版本。例如:
$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。这里有一个简单的例子,在PowerShell中的c#:http://activedirectoryfaq.com/2016/01/use-net-code-c-and-dlls-in-powershell/。这个选项最适合我。
3)将新版本的Microsoft.WindowsAzure.Storage.dll从Azure.Storage模块目录复制到AzureRm.Storage模块目录。这显然是一个脆弱的选择,但可能是最简单的快速解决方案。
我也面临同样的错误。该代码似乎适用于较旧的系统。我不知道是什么导致了这个问题。运行最新的Azure PowerShell并安装AzureRmStorageTable模块。 –