Я пытаюсь запустить 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.