Не удалось найти перегрузку для «Execute» и количество аргументов: «1». невозможно вставить в таблицу хранения Azure - PullRequest
0 голосов
/ 23 мая 2019

У меня есть скрипт powershell для загрузки данных в таблицу хранения Azure. Сценарий Powershell выглядит следующим образом:


$StorageAccountName = "xxx" 
$StorageAccountKey = "xxxxx"
$ctx = New-AzStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
$tableName = "ProvisioningRecord"
$table = Get-AzStorageTable –Name $tableName -Context $ctx

Add-Entity -table $table -partitionKey abc -rowKey xyz


function Add-Entity { 
   [CmdletBinding()] 

   param( 
      $table, 
      [String]$partitionKey, 
      [String]$rowKey 

   )  


   $entity = New-Object -TypeName "Microsoft.WindowsAzure.Storage.Table.DynamicTableEntity" -ArgumentList $partitionKey, $rowKey 

   $result = $table.CloudTable.Execute([Microsoft.WindowsAzure.Storage.Table.TableOperation]::Insert($entity)) 

}

Я получаю ошибку:

Cannot find an overload for "Execute" and the argument count: "1".
At line:1 char:1
+ $result = $table.CloudTable.Execute([Microsoft.WindowsAzure.Storage.T ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

По этой ссылке: https://www.catapultsystems.com/blogs/azure-storage-powershell-error-cannot-find-an-overload/ я добавил

$assemblySN = $table.CloudTable.GetType().Assembly.FullName
$entity = New-Object -TypeName "Microsoft.WindowsAzure.Storage.Table.DynamicTableEntity,$assemblySN" -ArgumentList $partitionKey, $rowKey
$result = $table.CloudTable.Execute((invoke-expression "[Microsoft.WindowsAzure.Storage.Table.TableOperation,$assemblySN]::InsertOrReplace(`$entity)"))

Это дает мне ошибку:

New-Object : Cannot find type [Microsoft.WindowsAzure.Storage.Table.DynamicTableEntity,Microsoft.Azure.Cosmos.Table, Version=0.10.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]: 
verify that the assembly containing this type is loaded.
At line:1 char:11
+ $entity = New-Object -TypeName "Microsoft.WindowsAzure.Storage.Table. ...
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

Но тот же код с вышеуказанными модификациями (с добавлением $ assemblySN) работает в версии Powershell 5.1.17134.590. Тот же сценарий не работает в Powershell версии 5.1.17763.316.

Кто-нибудь может мне помочь с этим?

1 Ответ

1 голос
/ 24 мая 2019

Какую версию модуля Az.Storage вы используете?(запустите Get-модуль для проверки).

В Az.Storage 1.1.0 управление таблицей осуществляется с помощью Microsoft.Azure.Cosmos.Table SDK.(поскольку новая клиентская библиотека хранения больше не поддерживает таблицу.)

Таким образом, пространство имен для объектов таблицы Azure изменено с «Microsoft.WindowsAzure.Storage.Table» на «Microsoft.Azure.Cosmos.Table».И вам необходимо соответственно изменить пространство имен в вашем скрипте.

Подробнее см. В https://github.com/Azure/azure-powershell/issues/8808

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...