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

使用Python调用Azure DevOps API获取用户列表遇注册错误求助

解决Azure DevOps Python SDK获取用户列表的错误及扩展需求

一、解决ValueError: API resource location ... is not registered错误

你遇到的这个错误是因为用错了客户端类型:get_accounts_client()是用来管理Azure DevOps账户级资源的(比如创建/删除组织、管理账户订阅),根本不是用来获取单个组织内用户列表的工具。要拿到组织内的用户数据,你得用Graph Client。

修正后的代码:

from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication

# 替换成你的PAT和组织URL
personal_access_token = 'your_personal_access_token'
organization_url = 'https://dev.azure.com/your_organization_name'

credentials = BasicAuthentication('', personal_access_token)
connection = Connection(base_url=organization_url, creds=credentials)

# 使用Graph Client获取组织内所有用户
graph_client = connection.clients_v5_1.get_graph_client()
users = graph_client.list_users()

# 遍历输出用户基础信息
for user in users:
    print(f"用户ID: {user.id}, 显示名称: {user.display_name}, 邮箱: {user.mail_address}")

为什么之前的代码会报错?

Accounts Client的接口是针对https://aex.dev.azure.com(账户管理专用域名)设计的,而你用的是组织级域名https://dev.azure.com/your_org。你的PAT权限通常只覆盖单个组织,调用账户级接口自然会触发“资源未注册”的错误。


二、获取用户创建日期和最后访问信息

1. 获取用户创建日期

用户的创建日期可以通过User Entitlements Client获取,它返回的用户权限对象里包含created_date字段:

# 获取用户权限信息(包含创建日期)
entitlements_client = connection.clients_v5_1.get_user_entitlements_client()
user_entitlements = entitlements_client.list_user_entitlements()

for ent in user_entitlements:
    print(f"用户: {ent.user.display_name}, 创建日期: {ent.created_date}")

2. 获取用户最后访问日期

Azure DevOps没有直接返回用户最后访问时间的Graph API,但可以通过Audit Log Client查询用户的登录事件来间接获取:

from azure.devops.v5_1.audit.models import AuditLogQueryOptions

audit_client = connection.clients_v5_1.get_audit_client()
# 根据需要调整查询的时间范围
query_options = AuditLogQueryOptions(start_time="2023-01-01T00:00:00", end_time="2024-01-01T00:00:00")
audit_events = audit_client.query_audit_log(query_options)

# 整理用户的最新登录时间
user_last_access = {}
for event in audit_events:
    # 筛选出用户登录事件
    if event.category == "Authentication" and event.action == "UserLoggedIn":
        user_id = event.actor.id
        event_time = event.timestamp
        # 只保留该用户最新的登录记录
        if user_id not in user_last_access or event_time > user_last_access[user_id]:
            user_last_access[user_id] = event_time

# 结合用户基础信息输出最后访问时间
for user in users:
    last_access = user_last_access.get(user.id, "无访问记录")
    print(f"用户: {user.display_name}, 最后访问时间: {last_access}")

注意事项

确保你的PAT拥有以下权限:

  • User Profile (Read):用于读取用户基础信息和权限数据
  • Audit Log (Read):用于查询登录审计事件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:25:47