You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求CreateOrUpdate AAD对象列表示例及Azure YAML管道集成指导

使用CreateOrUpdate管理AAD对象并配置Azure YAML夜间作业

作为CreateOrUpdate模式的新手,咱们先从实际的AAD对象操作示例入手,再一步步把它做成定时运行的夜间管道作业。

一、CreateOrUpdate模式操作AAD对象的示例

CreateOrUpdate的核心是幂等性——重复执行不会报错,对象存在就更新属性,不存在就创建新对象。下面用两种常用方式举例:

1. Azure CLI + Microsoft Graph(推荐)

用az rest调用Microsoft Graph的PUT接口,天然支持CreateOrUpdate逻辑:

创建/更新AAD用户

# 定义参数(实际使用建议用管道变量或密钥保管库存储敏感信息)
USER_UPN="john.doe@contoso.com"
USER_DISPLAY_NAME="John Doe"
USER_PASSWORD="你的安全密码"

# 执行CreateOrUpdate:用户存在则更新指定属性,不存在则创建新用户
az rest \
  --method PUT \
  --uri "https://graph.microsoft.com/v1.0/users/${USER_UPN}" \
  --body '{
    "accountEnabled": true,
    "displayName": "'"${USER_DISPLAY_NAME}"'",
    "mailNickname": "johndoe",
    "userPrincipalName": "'"${USER_UPN}"'",
    "passwordProfile": {
      "forceChangePasswordNextSignIn": false,
      "password": "'"${USER_PASSWORD}"'"
    }
  }'

列出AAD对象(用于操作验证)

执行完CreateOrUpdate后,可以用以下命令查看结果:

# 列出所有AAD用户,表格格式输出
az ad user list --output table

# 筛选特定前缀的用户,JSON格式输出
az ad user list --filter "startswith(displayName,'John')" --output json

2. ARM模板示例(适合批量/基础设施即代码场景)

如果习惯用ARM模板管理资源,下面是创建/更新AAD应用注册的模板:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appName": {
      "type": "string",
      "defaultValue": "MySampleApp"
    },
    "appReplyUrl": {
      "type": "string",
      "defaultValue": "https://localhost:44300/"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Graph/applications",
      "apiVersion": "2022-06-01",
      "name": "[guid(parameters('appName'))]",
      "properties": {
        "displayName": "[parameters('appName')]",
        "web": {
          "redirectUris": [
            "[parameters('appReplyUrl')]"
          ]
        }
      }
    }
  ]
}

这个模板会根据appName生成唯一资源ID,重复部署时如果资源存在就更新属性,不存在则创建新应用注册。

二、配置Azure YAML管道的夜间作业

接下来把上面的操作打包成定时运行的管道任务,每天夜间自动执行:

1. 完整YAML管道示例

# 代码提交触发(可选,可根据需要关闭)
trigger:
  branches:
    include:
      - main
  paths:
    include:
      - pipelines/aad-management.yml

# 定时触发:每天凌晨2点(UTC时间,可根据你的时区调整)
schedules:
- cron: "0 2 * * *"
  displayName: 夜间AAD对象同步作业
  branches:
    include:
      - main
  always: true # 即使没有代码变更也强制执行

# 使用Ubuntu代理(也可以选windows-latest)
pool:
  vmImage: 'ubuntu-latest'

# 定义管道变量(敏感信息建议用Azure密钥保管库)
variables:
  - name: azureSubscription
    value: '你的Azure服务连接名称'
  - name: userUpn
    value: 'john.doe@contoso.com'
  - name: userDisplayName
    value: 'John Doe'
  - name: keyVaultName
    value: '你的密钥保管库名称'

jobs:
- job: ManageAADObjects
  displayName: 执行AAD对象CreateOrUpdate与查询
  steps:
  # 从密钥保管库获取密码(避免硬编码敏感信息)
  - task: AzureKeyVault@2
    displayName: 从密钥保管库读取敏感信息
    inputs:
      azureSubscription: '$(azureSubscription)'
      KeyVaultName: '$(keyVaultName)'
      SecretsFilter: 'AADUserPassword'
      RunAsPreJob: false

  # 执行AAD操作的核心任务
  - task: AzureCLI@2
    displayName: 执行AAD用户CreateOrUpdate与列表查询
    inputs:
      azureSubscription: '$(azureSubscription)'
      scriptType: 'bash'
      scriptLocation: 'inlineScript'
      inlineScript: |
        set -e # 脚本出错时立即停止执行

        echo "=== 开始执行AAD用户CreateOrUpdate操作 ==="
        az rest \
          --method PUT \
          --uri "https://graph.microsoft.com/v1.0/users/$(userUpn)" \
          --body '{
            "accountEnabled": true,
            "displayName": "'"$(userDisplayName)"'",
            "mailNickname": "johndoe",
            "userPrincipalName": "'"$(userUpn)"'",
            "passwordProfile": {
              "forceChangePasswordNextSignIn": false,
              "password": "'"$(AADUserPassword)"'"
            }
          }'

        echo "=== 操作完成,列出所有AAD用户 ==="
        az ad user list --output table

2. 关键配置说明

  • 定时触发时区调整:cron: "0 2 * * *"是UTC时间2点,如果你在东八区,对应北京时间10点,要改成夜间执行的话,可设置为cron: "0 18 * * *"(UTC18点=北京时间次日2点)
  • 权限配置:确保你的Azure服务连接对应的服务主体拥有足够的Microsoft Graph权限(比如User.ReadWrite.All用于用户管理),需要在Azure AD应用注册中添加权限并授予管理员同意
  • 安全建议:所有敏感信息(比如密码)都要存在Azure密钥保管库,绝对不要硬编码在管道文件中

三、实用小提示

  • 幂等性优化:执行前可以先查询对象是否存在,避免不必要的API调用,但Microsoft Graph的PUT接口本身已经做了幂等处理,多数情况下无需额外判断
  • 日志与告警:可以在管道中添加PublishBuildArtifacts任务保存执行日志,或者集成Azure Monitor设置作业失败告警,确保夜间作业异常能及时发现
  • 错误处理:在脚本中添加if判断或try-catch逻辑,捕获并处理可能的异常(比如用户不存在时的特殊处理、API调用超时等)

内容的提问来源于stack exchange,提问作者gawe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:22:56