J'essaie d'exécuter azure powershell sur VSTS avec la commande Get-AzTableRow.
Powershell:
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.
Erreur:
$storageAccount = Get-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $storageAccountName
Remarque: Fonctionnement correct dans PowerShell ISE local. Utilisation de l'agent 'Hosted VS2017' dans VSTS
La version des modules installés en local et VSTS est la même lorsque j'exécute les commandes ci-dessous pour vérifier:
Az.Accounts 1.5.2 Az.Storage 1.3.0 AzTable 2.0.2 Az.Resources 1.3.1
3 Réponses :
Pour le problème que vous fournissez:
2019-05-17T08: 13: 38.6380364Z ## [erreur] Type introuvable [Microsoft.Azure.Cosmos.Table.TableQuery]: vérifiez que l'assembly contenant ce type est chargé
La raison est que vous devez utiliser le module Az.Storage version 1.1.0 ou supérieure. Jetez un œil aux troublant dans ce document . Et vous pouvez utiliser la commande PowerShell:
Update-Module -Name Az
Ensuite, ouvrez une nouvelle session PowerShell et cela fonctionnera.
Les commentaires ne sont pas destinés à une discussion approfondie; cette conversation a été déplacé pour chatter .
Vous devez installer le module Az sur votre machine d'agent si vous utilisez des agents privés.
vous devez utiliser un agent privé car vous ne pouvez pas mettre à jour la version du module PowerShell sur l'agent hosed (par exemple: Hosted VS2017).
Enfin capable d'exécuter le script sur VSTS:
Remarque: la version d'Azure Powershell doit être 4. * (aperçu)
$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 !!!'
p >
Avez-vous besoin d'un module d'importation pour fonctionner?
déjà importé le module à l'aide des commandes: Install-Module -Name Az -Scope CurrentUser -AllowClobber -Force Install-Module -Name AzTable -AllowClobber -Force -Scope CurrentUser
Exécutez "Get-module" après la reproduction du problème, quelle est la sortie? Le "Az.Storage 1.3.0" sera-t-il affiché dans la sortie? Une autre version du module "* .Storage" sera-t-elle affichée?
@ WeiWei-Microsoft Lorsque j'exécute la commande 'Get-InstalledModule -Name Az.Storage', la version que j'obtiens est '1.3.0' mais lorsque j'exécute 'Get-module', la version de 'Az.Storage' est «1.0.0»