如何在Google Workspace插件内判断安装方式及获取域安装用户数?
判断Google Workspace插件安装类型及域用户数量的可行方案
我刚好处理过类似的需求,目前Apps Script确实没有直接返回安装类型的内置方法,但通过以下两种方式可以实现你的需求:
一、区分域安装与个人安装
方法1:利用安装触发事件+管理员权限验证
当管理员为整个域安装插件时,onInstall(e)函数会被触发。我们可以在这个时机检查安装者是否为域管理员,并标记安装类型:
function onInstall(e) { // 获取当前安装用户的邮箱 const userEmail = Session.getActiveUser().getEmail(); try { const user = AdminDirectory.Users.get(userEmail); // 如果是域管理员,标记为域级安装 if (user.isAdmin) { PropertiesService.getScriptProperties().setProperty('INSTALL_TYPE', 'DOMAIN'); } else { PropertiesService.getScriptProperties().setProperty('INSTALL_TYPE', 'PERSONAL'); } } catch (err) { // 无法获取管理员信息,默认标记为个人安装 PropertiesService.getScriptProperties().setProperty('INSTALL_TYPE', 'PERSONAL'); } // 调用onOpen完成初始化流程 onOpen(e); }
使用这个方法需要先启用Admin Directory API(在Apps编辑器的「资源」→「高级Google服务」里开启),并授权https://www.googleapis.com/auth/admin.directory.user.readonly权限。
方法2:运行时通过域资源访问权限判断
如果错过了安装触发时机,也可以在插件运行时尝试访问域级资源来判断:
function getCurrentInstallType() { try { // 尝试获取域内任意一个用户,验证是否有域访问权限 AdminDirectory.Users.list({domain: 'your-domain.com', maxResults: 1}); return 'DOMAIN'; } catch (err) { // 无权限访问域目录,说明是个人安装 return 'PERSONAL'; } }
二、查询域内用户数量
如果插件是域级安装且已授权Admin Directory API权限,可以通过分页调用API统计域内用户总数:
function getDomainTotalUsers() { let totalUsers = 0; let pageToken = null; do { const userList = AdminDirectory.Users.list({ domain: 'your-domain.com', maxResults: 500, // 单次请求最大返回500条,API限制 pageToken: pageToken }); if (userList.users) { totalUsers += userList.users.length; } pageToken = userList.nextPageToken; } while (pageToken); return totalUsers; }
注意:这个功能必须由域管理员授权插件的域范围访问权限,否则普通用户调用会触发权限错误。
重要提醒
- 确保你的插件在Google Workspace Marketplace中设置为域范围部署,否则管理员安装也只是个人安装类型。
- 所有涉及Admin Directory的操作都需要在Google Cloud Console中启用对应API,否则会触发权限错误。
内容的提问来源于stack exchange,提问作者Stellan
相关产品推荐
相关产品推荐

