TypeError: 'ADGroup' object is not subscriptable Azure AD组报错
Azure Python SDK Azure AD组管理问题解答
1. ADGroup类型说明
ADGroup是azure-graphrbac SDK内置的Azure AD组实体模型类,归属于azure.graphrbac.models命名空间,对应Azure AD平台上的组实体对象。组创建、查询类操作返回的ADGroup实例,会携带组的全量核心属性,包括object_id、display_name、mail_nickname、mail_enabled、security_enabled等。
2. 获取创建后组的object_id并存入列表的实现方式
groups.create()方法返回的ADGroup实例直接暴露object_id属性,读取该属性追加到目标列表即可,核心实现逻辑如下:
from azure.common.credentials import ServicePrincipalCredentials from azure.graphrbac import GraphRbacManagementClient from azure.graphrbac.models import GroupCreateParameters import json # 推荐用上下文管理器读取JSON文件,避免资源泄漏 with open('csvjson.json', 'r', encoding='utf-8') as f: data = json.load(f) credentials = ServicePrincipalCredentials( client_id = "<你的应用客户端ID>", secret = "<你的应用客户端密钥>", tenant = "<你的租户ID>", resource = 'https://graph.windows.net' ) graphrbac_client = GraphRbacManagementClient( credentials, "<你的租户ID>" ) group_object_ids = [] for item in data: # 注意:GroupCreateParameters的security_enabled、mail_enabled为必填参数,需根据组类型赋值 create_params = GroupCreateParameters( display_name=item['Group Name'], mail_nickname=item['Mail Nick Name'], security_enabled=True, # 创建安全组设为True mail_enabled=False # 非邮件组设为False ) created_group = graphrbac_client.groups.create(create_params) # 读取object_id存入列表 group_object_ids.append(created_group.object_id)
注意:原有代码中初始化
GroupCreateParameters时缺失上述两个必填布尔参数,实际运行会触发参数校验错误,需要补全。
3. 序列化创建结果抛出TypeError的原因与修复方案
报错原因
groups.create()返回的是ADGroup类的实例,属于自定义模型对象,不是Python原生字典类型,无法直接被json.dump()/json.dumps()序列化,因此会抛出TypeError。
修复方案
选择以下任意一种方式将模型对象转为可序列化的字典后,再做JSON存储即可:
- 方案1:手动提取需要的字段组装字典,灵活控制输出字段
group_result = [] for item in data: created_group = graphrbac_client.groups.create(create_params) # 按需提取字段组装字典 group_info = { "object_id": created_group.object_id, "display_name": created_group.display_name, "mail_nickname": created_group.mail_nickname } group_result.append(group_info) # 写入JSON文件 with open('created_groups.json', 'w', encoding='utf-8') as f: json.dump(group_result, f, indent=2, ensure_ascii=False)
- 方案2:调用SDK模型内置的
as_dict()方法,自动将模型所有属性转为字典
# 替换手动组装字典的逻辑即可 group_info = created_group.as_dict() group_result.append(group_info)
内容的提问来源于stack exchange,提问作者Nikhil G P
相关产品推荐
相关产品推荐

