如何用Google App Script实现域内所有用户Drive存储每日检查及超额通知
域内全用户Drive存储自动巡检实现方案
现有代码的核心偏差
- 你当前代码中调用的
DriveApp.getStorageUsed()仅能获取脚本运行者本人的Drive存储用量,没有能力跨用户查询域内其他成员的存储数据,这是之前无法找到匹配方案的根本原因 - 原代码里的存储阈值
7.51311111E8仅对应约750MB,和你需要的20GB阈值存在数量级偏差
前置准备要求
要实现跨用户的域内存储巡检,必须满足两个前提:
- 使用Google Workspace域管理员账号开发运行脚本,普通个人账号无权限调用域级用户数据接口
- 在App Script服务列表中添加
Admin SDK服务,给脚本授予获取用户存储信息的对应权限
可直接复用的修正代码
// 全局配置,可根据实际需求调整 const STORAGE_LIMIT_BYTES = 21474836480; // 20GB对应的字节数 const NOTICE_SUBJECT = "Drive存储超额提醒"; const NOTICE_CONTENT = (usedGB) => `您好,您当前Google Drive已使用存储空间为 ${usedGB} GB,超出域内20GB的存储配额限制,请及时清理冗余文件释放存储空间。`; /** * 核心巡检逻辑:遍历域内所有活跃用户,匹配存储超额规则后发通知 */ function storageDailyCheck() { // 拉取域内所有未停用的用户列表 const userList = AdminDirectory.Users.list({ customer: 'my_customer', maxResults: 500, query: 'isSuspended=false', // 过滤已停用账号,减少无效查询 fields: 'users(primaryEmail,storageQuotaUsage)' // 仅拉取需要的字段,提升运行效率 }).users; // 逐个校验用户存储使用情况 userList.forEach(user => { const usedBytes = user.storageQuotaUsage; // 字节转GB,保留两位小数方便用户理解 const usedGB = (usedBytes / (1024 * 1024 * 1024)).toFixed(2); if(usedBytes > STORAGE_LIMIT_BYTES) { MailApp.sendEmail(user.primaryEmail, NOTICE_SUBJECT, NOTICE_CONTENT(usedGB)); } }); } /** * 设置每日自动运行的定时触发器 */ function setDailyTrigger() { ScriptApp .newTrigger('storageDailyCheck') .timeBased() .everyDays(1) .atHour(8) // 固定在每日早8点运行,避免随机时间触发打扰 .create(); }
落地注意事项
- 首次运行脚本时会弹出权限授权弹窗,需用域管理员账号完成全流程授权,脚本才能正常拉取域内用户数据
- 若域内总用户数超过500,需补充分页拉取逻辑,循环获取所有用户数据,否则仅能查询到前500个用户的信息
- 受Google Workspace版本的邮件发送配额限制,若域内超额用户数较多,可调整逻辑将所有超额用户名单汇总成单封邮件发送给域管理员,避免触发发送配额上限
内容的提问来源于stack exchange,提问作者ajo
相关产品推荐
相关产品推荐

