通过API或脚本移除Azure DevOps组织的直接访问权限
批量移除Azure DevOps组织中用户的直接访问权限
解决思路
通过Azure DevOps REST API结合PowerShell脚本批量处理,绕过UI的100条限制,精准移除用户的直接访问权限(保留组分配的权限,确保组规则优先生效)。
步骤1:准备工作
- 创建一个拥有**组织级用户管理(读/写)**权限的个人访问令牌(PAT)
- 确保本地PowerShell可以访问Azure DevOps API(无需额外模块,直接用
Invoke-RestMethod即可)
步骤2:PowerShell脚本批量移除直接访问权限
以下脚本会自动分页获取所有用户,筛选出直接分配访问级别的用户,然后批量移除其直接权限:
# 配置变量 $orgName = "你的组织名称" $pat = "你的PAT令牌" $apiVersion = "7.1-preview.3" # 构建请求头 $headers = @{ Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")) } # 分页获取所有用户权限信息 $allEntitlements = @() $continuationToken = $null $baseUrl = "https://vsaex.dev.azure.com/$orgName/_apis/userentitlements?api-version=$apiVersion" do { $requestUrl = $baseUrl if ($continuationToken) { $requestUrl += "&continuationToken=$continuationToken" } $response = Invoke-RestMethod -Uri $requestUrl -Headers $headers -Method Get $allEntitlements += $response.value $continuationToken = $response.continuationToken } while ($continuationToken) # 筛选出直接分配访问级别的用户(排除通过组分配的) $directAccessUsers = $allEntitlements | Where-Object { $_.accessLevel.source -eq "Direct" } # 批量构建移除操作请求体 $batchOperations = $directAccessUsers | ForEach-Object { @{ op = "remove" subjectDescriptor = $_.user.descriptor } } $batchBody = @{ operations = $batchOperations } | ConvertTo-Json -Depth 10 # 执行批量移除 $batchUrl = "https://vsaex.dev.azure.com/$orgName/_apis/userentitlements/batch?api-version=$apiVersion" Invoke-RestMethod -Uri $batchUrl -Headers $headers -Method Post -Body $batchBody -ContentType "application/json"
步骤3:解决新用户自动获Stakeholder权限的问题
要彻底避免项目管理员添加用户时自动分配直接访问权限,需修改组织默认访问级别:
- 进入Azure DevOps组织设置 → 用户 → 访问级别
- 找到默认访问级别,设置为「无访问权限」
- 此后,新添加到项目的用户只会加入项目组,访问级别完全由组规则控制,不会自动获得直接的Stakeholder权限
注意事项
- 执行脚本前,建议先筛选少量用户测试(比如加
| Select-Object -First 10),验证是否仅移除直接权限、组权限是否保留 - PAT权限必须足够,否则会出现API调用失败
- 若用户同时拥有直接访问和组访问,移除直接权限后,会自动继承组分配的访问级别
内容的提问来源于stack exchange,提问作者ANKIT KHARE
相关产品推荐
相关产品推荐

