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

在Google Apps Script中列出共享云端硬盘权限时多个字段显示undefined

问题:Google Apps Script获取共享云端硬盘权限时多个字段显示undefined

我尝试用Google Apps Script列出共享云端硬盘的权限,但运行代码后,DisplayName、EmailAddress等多个权限字段显示为undefined。以下是我的代码及运行输出:

function listAllSharedDrives() {
  let pageToken = null;
  let page;
  let pageperm;
  let contador=0;
  let idunidad;

  Logger.clear();
  //do {
    page = Drive.Drives.list({
      pageSize: 1,
      pageToken: pageToken,
      q: 'memberCount = 1',
      //fields在Drive API v3中未被文档记录,但它是避免字段为undefined所必需的
      fields: 'nextPageToken, drives(id, name, createdTime)',
      useDomainAdminAccess: true
    });
    const drives = page.drives;
    if (drives) 
    // 打印云端硬盘名称
      for (const drive of drives) {
        contador+=1;
        console.log('Id: %s Nombre: %s Creado en: %s', drive.id, drive.name, drive.createdTime);
        
        pageperm = Drive.Permissions.list (drive.id,{
          supportsAllDrives: true,
          useDomainAdminAccess: true
        })
        const lospermisos = pageperm.permissions;
        if (lospermisos)
         for (const mipermiso of lospermisos) {
           console.log('Permiso ID: %s\nDisplayName: %s\nTipo: %s\nKind: %s\nRole: %s\nEmail: %s\nDominio: %s\nExpirationTime: %s\nDeleted: %s\nView: %s\nPendingOwner: %s',mipermiso.id,mipermiso.displayName,mipermiso.type,mipermiso.kind,mipermiso.role,mipermiso.emailAddress,mipermiso.domain,mipermiso.expirationTime,mipermiso.deleted,mipermiso.view,mipermiso.pendingOwner);
           if (mipermiso.PermissionDetails)
             for (const detalle of mipermiso.PermissionDetails) {
               console.log('Detalle permissionType: %s inheritedFrom: %s Role: %s Inherited: %s',detalle.PermissionType,detalle.inheritedFrom,detalle.role,detalle.inherited)
             }
         }
        console.log('');
      }
  //  pageToken = page.nextPageToken;
  //} while (pageToken);
  console.log('Total de unidades compartidas %d',contador);  
}

运行输出:

信息 Id: 0APeuZG... Nombre: UAL Creado en: 2024-01-15T10:33:37.635Z
信息 Permiso ID: 156621468...
DisplayName: undefined
Tipo: user
Kind: drive#permission
Role: organizer
Email: undefined
Dominio: undefined
ExpirationTime: undefined
Deleted: undefined
View: undefined
PendingOwner: undefined


问题原因及修复方案

1. 未指定fields参数

Drive API v3默认只返回权限对象的核心字段(如id、type、kind、role),displayName、emailAddress等非核心字段需要显式通过fields参数指定才能返回。

2. 字段名大小写错误

API返回的字段采用小驼峰命名规则(如permissionDetails、permissionType),但代码中错误使用了大驼峰写法,导致无法读取对应字段值。

修改后的代码

function listAllSharedDrives() {
  let pageToken = null;
  let page;
  let pageperm;
  let contador=0;
  let idunidad;

  Logger.clear();
  //do {
    page = Drive.Drives.list({
      pageSize: 1,
      pageToken: pageToken,
      q: 'memberCount = 1',
      fields: 'nextPageToken, drives(id, name, createdTime)',
      useDomainAdminAccess: true
    });
    const drives = page.drives;
    if (drives) 
      for (const drive of drives) {
        contador+=1;
        console.log('Id: %s Nombre: %s Creado en: %s', drive.id, drive.name, drive.createdTime);
        
        // 添加fields参数,指定所有需要获取的权限字段
        pageperm = Drive.Permissions.list (drive.id,{
          supportsAllDrives: true,
          useDomainAdminAccess: true,
          fields: 'permissions(id, displayName, type, kind, role, emailAddress, domain, expirationTime, deleted, view, pendingOwner, permissionDetails(permissionType, inheritedFrom, role, inherited))'
        })
        const lospermisos = pageperm.permissions;
        if (lospermisos)
         for (const mipermiso of lospermisos) {
           console.log('Permiso ID: %s\nDisplayName: %s\nTipo: %s\nKind: %s\nRole: %s\nEmail: %s\nDominio: %s\nExpirationTime: %s\nDeleted: %s\nView: %s\nPendingOwner: %s',mipermiso.id,mipermiso.displayName,mipermiso.type,mipermiso.kind,mipermiso.role,mipermiso.emailAddress,mipermiso.domain,mipermiso.expirationTime,mipermiso.deleted,mipermiso.view,mipermiso.pendingOwner);
           // 修正字段名为小驼峰permissionDetails
           if (mipermiso.permissionDetails)
             for (const detalle of mipermiso.permissionDetails) {
               // 修正字段名为小驼峰permissionType
               console.log('Detalle permissionType: %s inheritedFrom: %s Role: %s Inherited: %s',detalle.permissionType,detalle.inheritedFrom,detalle.role,detalle.inherited)
             }
         }
        console.log('');
      }
  //  pageToken = page.nextPageToken;
  //} while (pageToken);
  console.log('Total de unidades compartidas %d',contador);  
}

说明

  • 通过fields参数明确指定需要返回的所有权限字段,确保API返回完整数据
  • 修正字段名的大小写错误,保证能正确读取API返回的属性值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:35:00