如何通过MS Graph/PowerShell获取ADO用户ID并导出用户项目至Excel
解决方案:获取Azure DevOps用户ID及所属项目并导出至Excel
1. 替代MS Graph,直接获取Azure DevOps用户ID
无需调用MS Graph,直接通过Azure DevOps的用户权限API即可获取包含用户ID的完整信息,API返回的每个条目里的id字段就是后续接口需要的用户ID,同时还包含用户的姓名、邮箱等基础信息。
2. 修正代码并实现遍历+导出逻辑
你的原存在几个问题:多余的-UseDefaultCredential(与PAT认证冲突)、变量引用错误、缺少遍历逻辑。以下是完整可运行的脚本:
完整PowerShell脚本
# 配置参数 $orgName = "adient" $pat = "<你的个人访问令牌(PAT)>" $outputExcelPath = ".\ADOUProjects.xlsx" # 生成PAT认证头 $base64AuthInfo = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$pat")) $authHeaders = @{Authorization = "Basic $base64AuthInfo"} # 1. 获取组织内所有用户的权限列表(包含用户ID) $allUsersUrl = "https://vsaex.dev.azure.com/$orgName/_apis/userentitlements?api-version=7.1-preview.1" $allUserEntitlements = Invoke-RestMethod -Uri $allUsersUrl -Method Get -Headers $authHeaders # 2. 遍历每个用户,收集其所属项目信息 $exportData = @() foreach ($user in $allUserEntitlements.value) { $userId = $user.id $userDisplayName = $user.user.displayName $userEmail = $user.user.principalName # 获取当前用户的项目权限详情 $userProjectsUrl = "https://vsaex.dev.azure.com/$orgName/_apis/userentitlements/$userId?api-version=7.1-preview.2" $userProjectDetails = Invoke-RestMethod -Uri $userProjectsUrl -Method Get -Headers $authHeaders # 提取所有所属项目名称,用逗号分隔 $projectList = $userProjectDetails.projectEntitlements.projectRef.name -join ", " # 添加到导出数据集 $exportData += [PSCustomObject]@{ "用户ID" = $userId "用户名" = $userDisplayName "邮箱" = $userEmail "所属项目列表" = $projectList } } # 3. 导出到Excel(需先安装ImportExcel模块) # 若未安装模块,执行:Install-Module -Name ImportExcel -Scope CurrentUser -Force $exportData | Export-Excel -Path $outputExcelPath -AutoSize -BoldTopRow -FreezeTopRow Write-Host "数据导出完成,文件路径:$outputExcelPath"
3. 关键注意事项
- 认证冲突:必须移除
-UseDefaultCredential参数,PAT的Basic认证与默认凭据认证不能同时使用 - API版本:使用较新的
7.1-preview版本,确保接口兼容性和数据完整性 - Excel依赖:脚本使用
ImportExcel模块处理Excel导出,这是PowerShell生态中最便捷的Excel操作工具,未安装时需先执行安装命令 - 数据处理:通过
projectEntitlements.projectRef.name提取项目名称,多个项目用逗号拼接成字符串,便于Excel展示
内容的提问来源于stack exchange,提问作者Raviteja Atchuta
相关产品推荐
相关产品推荐

