2017-10-19 10 views
1

Je suis en train de faire toutes les lignes dans une table de stockage Azure en utilisant ces PoserShell commandes:Comment obtenir une ligne dans les tables Azure Storage à l'aide de PowerShell?

$saContext = (AzureRmStorageTable\Get-AzureRmStorageAccount -Name $storageAccount -ResourceGroupName $resourceGroup).Context 
$table = Get-AzureStorageTable -Name $tableName -Context $saContext 
Get-AzureStorageTableRowAll -table $table 

mais il retournera cette erreur:

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 

J'ai même utilisé ces lignes de commandes aussi, mais tous retournera la même erreur:

#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 

savez-vous comment je peux obtenir une rangée dans les tables de stockage Azure en utilisant PowerShell?
en effet, j'ai installé AzureRmStorageTable de here.

+0

Je suis également confronté à cette même erreur. Le code semble fonctionner sur les anciens systèmes. Je ne sais pas ce qui cause le problème. Exécution de la dernière version d'Azure PowerShell et installation du module AzureRmStorageTable. –

Répondre

1

J'ai trouvé que l'erreur est due à un problème dans AzureRmStorageTable V1.0.0.17. Je l'ai mis à jour à la version 1.0.0.20, et ça marche maintenant. Dans la documentation de la version 1.0.0.20, ils ont écrit: 'Implémenté quelques mesures afin d'éviter les conflits entre les différentes versions de l'assembly, plus spécifiquement Microsoft.WindowsAzure.Storage.Dll.'

Je ne me rappelle pas quelle version a été installée sur les Runbooks par défaut, de toute façon, cela fonctionnera si vous le mettez à jour.

Merci

+0

Merci! J'ai regardé le code et compris ce qui ne va pas. Il semble que PowerShell soit confondu entre 'CloudTable' (Probablement Azure Resource Manager) et' AzureStorageTable' (Probablement à partir de Azure Classique) à cause de quoi nous obtenons l'erreur. Si vous saisissez '[domaineApp] :: currentdomain.getassemblies()', vous remarquerez qu'il existe 2 fichiers avec des versions différentes pour 'Microsoft.WindowsAzure.Storage'. Cela provoque la rupture des choses ... Encore une fois, merci beaucoup! –

1

Ceci est le résultat de differering versions dll en modules et powershell Azure.Storage AzureRm.Storage. AzureRm.Storage a une version plus ancienne de Microsoft.WindowsAzure.Storage.dll que la version dans Azure.Storage, et manque de fonctionnalité. Une fois que les deux assemblées sont chargées, il n'y a pas de bonne façon de dire à powershell lequel utiliser.

Voir la question ici: https://github.com/Azure/azure-powershell/issues/5030

je peux penser à trois solutions de contournement:

1) tel que mentionné dans le lien, vous pouvez utiliser New-Object pour créer des objets powershell spécifiant la version de montage. .: par exemple

$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) Créer une classe compilée dans Powershell pour gérer votre interaction directe .net. La commande Add-Type crée votre classe et vous pouvez référencer la DLL correcte dans le paramètre -ReferencedAssemblies. Il y a un exemple simple de C# dans powershell ici: http://activedirectoryfaq.com/2016/01/use-net-code-c-and-dlls-in-powershell/. Cette option a fonctionné le mieux pour moi.

3) Copiez la version plus récente de Microsoft.WindowsAzure.Storage.dll du répertoire du module Azure.Storage dans le répertoire du module AzureRm.Storage. C'est évidemment une option fragile, mais probablement la solution la plus facile.