寻求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
相关产品推荐
相关产品推荐

