Не удается найти сообщение об ошибке типа [Microsoft.Azure.Cosmos.Table.TableQuery] при запуске команды Get-AzTableRow в VSTS Azure PowerShell. - PullRequest
1 голос
/ 17 мая 2019

Я пытаюсь запустить Azure PowerShell на VSTS с помощью команды Get-AzTableRow.

Powershell:

$ConfigurationPortalName = "xxxx"
$ResourceGroupName = "xxxx"
$Location = "West Europe"
$SubscriptionName = "xxxx"
$SubscriptionId = "xxxx"
$AdHocReleaseDefinitionId = "xxxx"
$MultipleEnvReleaseDefId = "xxxx"
$StorageConnectionString = "xxxx"
$StorageContainerName = "xxxx"
$PortalStorageAccountName = "xxxx"
$SkuName = "Standard_LRS"
$tableName = "Subscription"
$partitionKey = "Subscription"
$storageAccountName = $PortalStorageAccountName.ToLower()

write-host "*Install modules*"
Install-Module -Name Az.Accounts -RequiredVersion 1.5.2 -Scope CurrentUser -AllowClobber -Force
Install-Module -Name Az.Resources -RequiredVersion 1.3.1 -Scope CurrentUser -AllowClobber -Force
Install-Module -Name Az.Storage -RequiredVersion 1.3.0 -Scope CurrentUser -AllowClobber -Force
Install-Module -Name AzTable -RequiredVersion 2.0.2 -Scope CurrentUser -AllowClobber -Force 

write-host "*Current version*"
Get-Module Az.Storage
Get-Module Az.Accounts
Get-Module AzTable
Get-Module Az.Resources

write-host "*remove module*"
try
{
    Remove-Module -Name AzureRM.Profile -Force
    Remove-Module -Name Az.Accounts -Force
    Remove-Module -Name Az.Storage -Force
    Remove-Module -Name AzTable -Force
}
catch
{
    $_.Exception.Message
}

write-host "*Import module version*"
Import-Module -Name Az.Accounts -RequiredVersion 1.5.2 -Force
Import-Module -Name Az.Resources -RequiredVersion 1.3.1 -Force
Import-Module -Name Az.Storage -RequiredVersion 1.3.0 -Force
Import-Module -Name AzTable -RequiredVersion 2.0.2 -Force

write-host "*Final version*"
Get-Module Az.Accounts
Get-Module Az.Storage
Get-Module AzTable
Get-Module Az.Resources

$storageAccount = Get-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $storageAccountName
Write-host "strgacc : " $storageAccount

if (!$storageAccount) 
{
    $storageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName `
        -Name $storageAccountName `
        -Location $Location `
        -SkuName $SkuName `
        -Kind Storage

    Write-host 'Storage Account Created !!!'
}
else 
{
    Write-host 'Storage Account Already Exist !!!'
}

$storageAccountKeys = Get-AzStorageAccountKey -ResourceGroupName $ResourceGroupName -AccountName $storageAccountName
$newStorageConnectionString = [string]::Format('DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1};EndpointSuffix=core.windows.net', $storageAccountName, $storageAccountKeys[0].Value);

$webApp = Get-AzWebApp -ResourceGroupName $ResourceGroupName -Name $ConfigurationPortalName;
$appSettingList = $webApp.SiteConfig.AppSettings;

$hash = @{};
ForEach ($kvp in $appSettingList) 
{
    $hash[$kvp.Name] = $kvp.Value;
}

if ($hash['Config:Storage:ConnectionString'] -ne $newStorageConnectionString) 
{
    $hash['Config:Storage:ConnectionString'] = $newStorageConnectionString;

    Set-AzWebApp -ResourceGroupName $ResourceGroupName -Name $ConfigurationPortalName -AppSettings $hash;

    Write-host 'WebApp Configured With New Storage Account Key successfully !!!'
}
else 
{
    Write-host 'WebApp Already Configured With Storage Account Key !!!' 
}

$ctx = $storageAccount.Context

#Get Storage Tabel Reference
$cloudTable  = (Get-AzStorageTable -Name $tableName -Context $ctx -ErrorVariable ev -ErrorAction SilentlyContinue).CloudTable

#If no reference then create new table else check for default entry
if ($ev) 
{
    New-AzStorageTable -Name $tableName –Context $ctx;
    $cloudTable  = (Get-AzStorageTable -Name $tableName -Context $ctx -ErrorVariable ev -ErrorAction SilentlyContinue).CloudTable
    Write-host 'Table Created :' $cloudTable
}

Write-Host "Table :" $cloudTable

if ($cloudTable) 
{
    #$rows = Get-AzTableRow -table $cloudTable -partitionKey $partitionKey | ft
    $rows = "aaa"
    write-host "Rows :" $rows
    #if (!$rows)
    if ($rows) 
    {
        Add-AzTableRow `
            -table $cloudTable `
            -partitionKey $partitionKey `
            -rowKey $SubscriptionName `
            -property @{`
                            "SubscriptionId"          = $SubscriptionId; `
                            "AdHocReleaseDefinitionId" = $AdHocReleaseDefinitionId; `
                            "MultipleEnvReleaseDefId"  = $MultipleEnvReleaseDefId; `
                            "StorageConnectionString" = $StorageConnectionString; `
                            "StorageContainerName"    = $StorageContainerName
                        }

        Write-host 'Row successfully inserted !!!'
    }
    else 
    {
        Write-host 'Default rows already configured !!!'
    }
}
else 
{
    Write-host 'Table Storage Reference Not Found !!!'
}
Write-Host 'done'

Ошибка:

2019-05-17T08:13:38.6380364Z ##[error]Cannot find type [Microsoft.Azure.Cosmos.Table.TableQuery]: verify that the assembly containing this type is loaded.

Примечание: Работает нормально в локальном PowerShell ISE.Использование агента 'Hosted VS2017' в VSTS

Версия установленных модулей в локальном и VSTS одинакова, когда я запускаю следующие команды для проверки:

Get-Module Az.Storage
Get-Module Az.Accounts
Get-Module AzTable
Get-Module Az.Resources

затем версияя получаю:

Az.Accounts 1.5.2
Az.Storage 1.3.0
AzTable 2.0.2
Az.Resources 1.3.1

Теперь новая ошибка отображается в строке:

$storageAccount = Get-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $storageAccountName

Ошибка:

2019-05-22T10:38:30.2164835Z ##[error]Method 'get_SerializationSettings' in type 'Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient' from assembly 'Microsoft.Azure.PowerShell.Clients.ResourceManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' does not have an implementation.

Ответы [ 3 ]

0 голосов
/ 22 мая 2019

на основе Управление выставлением счетов организации в DevOps Azure - обновление Sprint 150 # Поддержка Azure для модуля PowerShell Az Az *

You need to install the Az module on your agent machine if you are using private agents.

вам следует использовать частный агент, поскольку вы не можете обновить версию модуля powershell на подключенном агенте (например: Hosted VS2017).

0 голосов
/ 24 мая 2019

Наконец-то удалось запустить скрипт на VSTS:

Примечание: версия Azure Powershell должна быть 4. * (превью)

$ConfigurationPortalName = "xxxx"
$ResourceGroupName = "xxxx"
$Location = "West Europe"
$SubscriptionName = "xxxx"
$SubscriptionId = "xxxx"
$AdHocReleaseDefinitionId = "xxxx"
$MultipleEnvReleaseDefId = "xxxx"
$StorageConnectionString = "xxxx"
$StorageContainerName = "xxxx"
$SkuName = "Standard_LRS"
$tableName = "Subscription"
$partitionKey = "Subscription"
$storageAccountName = "xxxx"

write-host "*Install Modules*"
Install-Module -Name Az.Accounts -RequiredVersion 1.5.2 -Scope CurrentUser -AllowClobber -Force
Install-Module -Name Az.Storage -RequiredVersion 1.3.0 -Scope CurrentUser -AllowClobber -Force
Install-Module -Name AzTable -RequiredVersion 2.0.2 -Scope CurrentUser -AllowClobber -Force 

write-host "*remove module*"
Remove-Module -Name Az.Accounts -ErrorAction SilentlyContinue -Force
Remove-Module -Name Az.Storage -ErrorAction SilentlyContinue -Force
Remove-Module -Name AzTable -ErrorAction SilentlyContinue -Force

write-host "*Import Module version*"
Import-Module -Name Az.Accounts -RequiredVersion 1.5.2 -Force
Import-Module -Name Az.Storage -RequiredVersion 1.3.0 -Force
Import-Module -Name AzTable -RequiredVersion 2.0.2 -Force

write-host "*Get Module version currently in use*"
Get-Module Az.Accounts
Get-Module Az.Storage
Get-Module AzTable

$storageAccount = Get-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $storageAccountName

if (!$storageAccount) 
{
    $storageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName `
        -Name $storageAccountName `
        -Location $Location `
        -SkuName $SkuName `
        -Kind Storage

    Write-host 'Storage Account Created !!!'
}
else 
{
    Write-host 'Storage Account Already Exist !!!'
}

$storageAccountKeys = Get-AzStorageAccountKey -ResourceGroupName $ResourceGroupName -AccountName $storageAccountName
$newStorageConnectionString = [string]::Format('DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1};EndpointSuffix=core.windows.net', $storageAccountName, $storageAccountKeys[0].Value);
$webApp = Get-AzWebApp -ResourceGroupName $ResourceGroupName -Name $ConfigurationPortalName;
$appSettingList = $webApp.SiteConfig.AppSettings;
$hash = @{};

ForEach ($kvp in $appSettingList) 
{
    $hash[$kvp.Name] = $kvp.Value;
}

if ($hash['Config:Storage:ConnectionString'] -ne $newStorageConnectionString) 
{
    $hash['Config:Storage:ConnectionString'] = $newStorageConnectionString;
    Set-AzWebApp -ResourceGroupName $ResourceGroupName -Name $ConfigurationPortalName -AppSettings $hash;
    Write-host 'WebApp Configured With New Storage Account Key successfully !!!'
}
else 
{
    Write-host 'WebApp Already Configured With Storage Account Key !!!' 
}

$ctx = $storageAccount.Context

#Get Storage Tabel Reference
$cloudTable  = (Get-AzStorageTable -Name $tableName -Context $ctx -ErrorVariable ev -ErrorAction SilentlyContinue).CloudTable

#If no reference then create new table else check for default entry
if($ev)
{
    New-AzStorageTable -Name $tableName –Context $ctx;
    $cloudTable  = (Get-AzStorageTable -Name $tableName -Context $ctx).CloudTable
    Write-host 'Table created successfully !!!'
}

Write-Host "Table name :" $cloudTable

if ($cloudTable) 
{
    $rows = Get-AzTableRow -table $cloudTable -partitionKey $partitionKey | ft
    if (!$rows)
    {
        Add-AzTableRow `
            -table $cloudTable `
            -partitionKey $partitionKey `
            -rowKey $SubscriptionName `
            -property @{`
                            "SubscriptionId"          = $SubscriptionId; `
                            "AdHocReleaseDefinitionId" = $AdHocReleaseDefinitionId; `
                            "MultipleEnvReleaseDefId"  = $MultipleEnvReleaseDefId; `
                            "StorageConnectionString" = $StorageConnectionString; `
                            "StorageContainerName"    = $StorageContainerName
                        }

        Write-host 'Row successfully inserted !!!'
    }
    else 
    {
        Write-host 'Default Row already configured !!!'
    }
}
else 
{
    Write-host 'Table Storage Reference Not Found !!!'
}

Write-Host 'Completed !!!'
0 голосов
/ 20 мая 2019

Для указанной проблемы:

2019-05-17T08: 13: 38.6380364Z ## [ошибка] Не удается найти тип [Microsoft.Azure.Cosmos.Table.TableQuery]: проверитьзагружается сборка, содержащая этот тип

. Причина в том, что вам нужно использовать модуль Az.Storage версии 1.1.0 или выше, чем.Взгляните на тревогу в этом документе.И вы можете использовать команду PowerShell:

Update-Module -Name Az

Затем откройте новый сеанс PowerShell, и он будет работать.

...