有关以下问题(Azure DevOps - Custom Task - PowerShell with Azure Authentification),我现在正在使用$url
通过Azure DevOps自定义任务进行登录。
在下一步中,我想并行运行多个作业以首先进行操作,然后通过模板部署某些Azure资源。使用AzureRM可以正常工作,但是切换到Az后我总是会收到错误消息
您的Azure凭据尚未设置或已过期,请 运行Connect-AzAccount来设置您的Azure凭据。
我已经将Az模块更新为最新版本。
这是我的方法:
身份验证
Connect-AzAccount
并行部署
try {
$endpoint = Get-VstsEndpoint -Name $serviceName -Require
if (!$endpoint) {
throw "Endpoint not found..."
}
$subscriptionId = $endpoint.Data.SubscriptionId
$tenantId = $endpoint.Auth.Parameters.TenantId
$servicePrincipalId = $endpoint.Auth.Parameters.servicePrincipalId
$servicePrincipalKey = $endpoint.Auth.Parameters.servicePrincipalKey
$spnKey = ConvertTo-SecureString $servicePrincipalKey -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential($servicePrincipalId,$spnKey)
Connect-AzAccount -ServicePrincipal -TenantId $tenantId -Credential $credentials
Select-AzSubscription -SubscriptionId $subscriptionId -Tenant $tenantId
$ctx = Get-AzContext
Write-Host "Connected to subscription '$($ctx.Subscription)' and tenant '$($ctx.Tenant)'..."
} catch {
Write-Host "Authentication failed: $($_.Exception.Message)..."
}
答案 0 :(得分:0)
我个人使用此命令:
Connect-AzureRmAccount
我首先直接使用ISE控制台登录 ,然后该会话将保持不变,并且我可以运行任何脚本而不会出现任何问题(无需在脚本内部使用此命令)。
希望它对您有帮助。
编辑。
我看到您也在选择订阅,这是我使用的订阅。
Select-AzureRmSubscription -Subscription 'Subscription ID'
答案 1 :(得分:0)
由于某种原因(我不知道),将上下文传递给后台作业不再有效,因为移至Az模块(也是最新版本(1.4.0))。我尝试将Save-AzContext
与Import-AzContext
一起使用,或者通过Get-AzContext
获取上下文,然后将其传递给后台作业(通过Set-AzContext
或直接使用-DefaultProfile
(此方法使用AzureRm模块))。
现在适用于我的解决方法是分别对每个后台作业进行身份验证。
有关职位定义:
foreach ($armTemplateFile in $armTemplateFiles) {
$logic = {
Param(
[object]
[Parameter(Mandatory=$true)]
$endpointInput,
[object]
[Parameter(Mandatory=$true)]
$armTemplateFile,
[string]
[Parameter(Mandatory=$true)]
$resourceGroupName
)
###########################
#Login
Write-Host "Authenticating..."
try {
$endpoint = $endpointInput
if (!$endpoint) {
throw "Endpoint not found..."
}
$subscriptionId = $endpoint.Data.SubscriptionId
$tenantId = $endpoint.Auth.Parameters.TenantId
$servicePrincipalId = $endpoint.Auth.Parameters.servicePrincipalId
$servicePrincipalKey = $endpoint.Auth.Parameters.servicePrincipalKey
$spnKey = ConvertTo-SecureString $servicePrincipalKey -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential($servicePrincipalId,$spnKey)
Connect-AzAccount -ServicePrincipal -TenantId $tenantId -Credential $credentials
Select-AzSubscription -SubscriptionId $subscriptionId -Tenant $tenantId
$ctx = Get-AzContext
Write-Host "Connected to subscription '$($ctx.Subscription)' and tenant '$($ctx.Tenant)'..."
} catch {
Write-Host "Authentication failed: $($_.Exception.Message)..."
}
开始工作:
Start-Job $logic -Name $jobName -ArgumentList $endpoint, $armTemplateFile, $ResourceGroupName