【问题标题】:Install-Module -Name AzureAD -Scope CurrentUser -Force安装模块 -Name AzureAD -Scope CurrentUser -Force
【发布时间】:2023-03-09 03:33:01
【问题描述】:

我正在尝试在 Azure DevOps 中的代理 Windows 2019 Maschine 上安装带有 Powershell 的 AzureAD 模块。范围是查询 Get-AzureADGroupMember 并查看该 Azure AD 组的成员。运行 DevOps Task 后,maschine 似乎停留在下面的状态,抛出 无状态。我错过了什么吗?

Install-Module -Name AzureAD -Scope CurrentUser -Force
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Connect-AzureAD
Get-AzureADGroupMember -ObjectId "xxxxx-xxxxx-xxxxxxxx" 

【问题讨论】:

    标签: azure powershell azure-devops


    【解决方案1】:

    命令Connect-AzureAD需要添加Credential才能连接AzureAD。默认情况下,服务主体 ARM 连接无法将所需的凭据传递给此命令。

    要使用Service Principal ARM Connection连接Azure Ad,需要添加额外的任务和脚本来实现。

    这是一个例子:

    steps:
    - task: AzureCLI@2
      displayName: 'Azure CLI '
      inputs:
        azureSubscription: kevin0322
        scriptType: ps
        addSpnToEnvironment: true
        scriptLocation: inlineScript
        inlineScript: |
         echo "##vso[task.setvariable variable=ARM_CLIENT_ID]$env:servicePrincipalId"
             
         echo "##vso[task.setvariable variable=ARM_CLIENT_SECRET]$env:servicePrincipalKey"
             
         echo "##vso[task.setvariable variable=ARM_TENANT_ID]$env:tenantId"
         
        
    
    - powershell: |
       az login --service-principal --username $(ARM_CLIENT_ID) --password $(ARM_CLIENT_SECRET)  --tenant $(ARM_TENANT_ID)
       
       $aadToken = az account get-access-token --resource-type aad-graph | ConvertFrom-Json
       
       Install-Module -Name AzureAD -Scope CurrentUser -Force
       
       Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
       
       Connect-AzureAD   -AccountId $(ARM_CLIENT_ID) -TenantId $(ARM_TENANT_ID) -AadAccessToken $aadToken.accessToken
       
       Get-AzureADGroupMember -ObjectId "xxx" 
      displayName: 'PowerShell Script'
    

    您可以在 Azure CLI 任务中使用 Service Principal ARM Connection,然后您可以获得与 Service Principal 相关的变量(启用 addSpnToEnvironment: true )。

    在 Powershell 任务中,您可以使用 Azure CLI 任务中的变量来运行 azure cli 命令以获取凭据的 aadtoken。

    终于不用手动输入用户名和密码就可以成功执行Connect-AzureAD命令了。

    【讨论】:

    • 在 DevOps 中的 Ubuntu 代理上运行它有什么限制吗?
    【解决方案2】:

    我检查了脚本。

    Connect-AzureAD 提示登录用户界面

    这可能是没有进展的原因。

    您可以传递凭据 - 这将阻止登录提示。

    Connect-AzureAD -Credential $Credential
    

    【讨论】:

    • 我在使用服务主体 ARM 连接到 Azure 的 DevOps 管道中运行它。这不是通过此服务主体连接并获取该凭据吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 2018-02-23
    • 2016-02-20
    相关资源
    最近更新 更多