I have an Azure DevOps pipeline using the AzurePowerShell@5
task. I pass the service connection to the task and it logs in to Azure. That part is good.
The PowerShell code that is executed by the task calls Get-AzADServicePrincipalAppRollAssignment
, which requires the latest Az.Resources 6.16.0
. Az.Resources 6.16.0
in turn requires Az.Accounts 2.16.0
. However, the AzurePowerShell@5
task installed Az.Accounts 2.15.1
.
When I try to remove Az.Accounts 2.15.1
and install the latest version, I get the following error. Not sure how to get around that. Is there a lock on the assembly because it was used to log in to Azure?
I have read about using a PowerShell session to load modules but my hunch is that would log me out of Azure?
I agree with @Galna Greta, The AzurePowershell@5
task will only use the Az version installed on the agent.
I tried Installing Az.Accounts - 2.16.0
and Az.Resources
in Azure Powershell task with Install-Module command but it failed. Thus instead of using AzurePowershell@5
task I used Powershell@2 task like below: -
trigger:
- main
pool:
vmImage: windows-latest
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
# Check if Az.Accounts module is installed, if not, install it
if (-not (Get-Module -Name Az.Accounts -ListAvailable)) {
Install-Module -Name Az.Accounts -Force -AllowClobber -Scope CurrentUser -Repository PSGallery -RequiredVersion 2.16.0
} else {
Update-Module -Name Az.Accounts -Force -AllowClobber -RequiredVersion 2.16.0
}
if (-not (Get-Module -Name Az.Resources -ListAvailable)) {
Install-Module -Name Az.Resources -Force -AllowClobber -Scope CurrentUser -Repository PSGallery -RequiredVersion 6.16.0
} else {
$azAccountsVersion = (Get-InstalledModule -Name Az.Accounts).Version
Install-Module -Name Az.Resources -Force -AllowClobber -Scope CurrentUser -Repository PSGallery -RequiredVersion $azAccountsVersion -AllowPrerelease
}
Get-InstalledModule -Name Az.Accounts, Az.Resources | Select-Object Name, Version
$SecurePassword = ConvertTo-SecureString -String "q-xxxxxxxx_rsVKJKbRs" -AsPlainText -Force
$TenantId = '83xxxxxx8592395'
$ApplicationId = 'cxxxxxxxxxxxxxxb'
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $ApplicationId, $SecurePassword
Connect-AzAccount -ServicePrincipal -TenantId $TenantId -Credential $Credential
Get-AzADServicePrincipalAppRoleAssignment -ServicePrincipalId c0xxxxxxxxxx35cb
Output: -