如何使用Google Apps Script获取Google Drive中设为受限共享模式的文件及文件夹
Google Apps Script 实现获取受限共享Drive资源清单方案
前置准备
- 打开你的Google Sheets,点击「扩展 > Apps Script」进入脚本编辑器
- 在编辑器左侧「服务」栏点击「+」,找到「Drive API」选择v3版本添加到项目中
核心实现逻辑
你要找的受限共享设置,本质是文件/文件夹没有配置企业全域级的访问权限,仅允许手动添加的指定用户/群组访问,核心判断逻辑如下:
- 遍历指定范围的所有Drive文件/文件夹(支持指定根文件夹、我的云端硬盘、共享盘)
- 拉取每个资源的所有权限配置
- 检查权限列表中是否存在
type为domain的全域权限条目,不存在即为受限共享资源 - 输出符合条件的资源信息到关联的Google Sheet中
参考代码
// 配置项:替换为你们企业的域名,多域名可以加在数组里 const CORP_DOMAINS = ['your-company.com']; // 配置项:要扫描的根文件夹ID,留空则扫描当前账号的「我的云端硬盘」 const SCAN_ROOT_FOLDER_ID = ''; // 配置项:扫描结果输出到当前Sheet的起始行 let START_ROW = 2; function getRestrictedSharedItems() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 写入表头 sheet.getRange(1,1,1,5).setValues([['资源名称', '资源类型', '资源ID', '访问链接', '所有者邮箱']]); let output = []; let pageToken = null; do { // 拉取文件列表 const params = { q: SCAN_ROOT_FOLDER_ID ? `'${SCAN_ROOT_FOLDER_ID}' in parents and trashed = false` : 'trashed = false', fields: 'nextPageToken, files(id, name, mimeType, webViewLink, owners, permissions)', pageToken: pageToken, supportsAllDrives: true, includeItemsFromAllDrives: true }; const res = Drive.Files.list(params); const files = res.files || []; files.forEach(file => { // 判断是否为受限共享:无域类型权限 const isRestricted = !file.permissions.some(perm => { return perm.type === 'domain' && CORP_DOMAINS.includes(perm.domain); }); if (isRestricted) { output.push([ file.name, file.mimeType === 'application/vnd.google-apps.folder' ? '文件夹' : '文件', file.id, file.webViewLink, file.owners[0].emailAddress ]); } }); // 批量写入减少API调用 if (output.length >= 100) { sheet.getRange(START_ROW, 1, output.length, 5).setValues(output); START_ROW += output.length; output = []; } pageToken = res.nextPageToken; } while (pageToken); // 写入剩余结果 if (output.length > 0) { sheet.getRange(START_ROW, 1, output.length, 5).setValues(output); } SpreadsheetApp.getUi().alert(`扫描完成,共找到${START_ROW - 2 + output.length}个受限共享资源`); }
注意事项
- 若需要扫描企业全域所有资源,需使用企业超级管理员账号为脚本配置全域委派权限,否则仅能扫描当前账号有权限访问的资源
- 资源量较大时建议分批扫描,避免触发Drive API的调用配额限制
- 确认企业所有使用的域名都已添加到
CORP_DOMAINS配置项中,避免出现误判
内容的提问来源于stack exchange,提问作者Tejesh Dohare
相关产品推荐
相关产品推荐

