GSuite用户最近使用设备序列号获取及Chromebook校园管理系统开发问询
嗨,我来帮你一步步拆解这两个需求,结合学校Chromebook管理的场景给出实用的实现方案:
1. 获取GSuite用户最近使用设备的序列号
要获取GSuite用户关联的Chromebook序列号,最可靠的方式是借助Google Workspace Admin SDK Directory API的Chrome设备管理能力:
- 先确保你的Google Cloud项目已启用Admin SDK,并配置好OAuth 2.0凭据(需授予
https://www.googleapis.com/auth/admin.directory.device.chromeos权限,且执行者要有Workspace管理员权限)。 - 调用
chromeosdevices.list接口时,用query参数过滤指定用户的邮箱,比如query: "userEmail:xxx@your-school-domain.com",就能返回该用户绑定的所有Chromebook。 - 从返回结果里,通过
lastSync字段筛选出最近使用的设备,对应的serialNumber就是你要的序列号。
这里给个Google Apps Script的快速实现示例:
function getLatestDeviceSerialForUser(userEmail) { const customerId = '你的Workspace客户ID'; // 可从Admin控制台获取 const deviceResponse = AdminDirectory.Chromeosdevices.list(customerId, { query: `userEmail:${userEmail}`, maxResults: 1, // 只取最近的一条 orderBy: 'lastSync desc' }); if (deviceResponse.chromeosdevices?.length > 0) { const latestDevice = deviceResponse.chromeosdevices[0]; console.log(`用户${userEmail}最近使用的设备序列号:${latestDevice.serialNumber}`); return latestDevice.serialNumber; } else { console.log(`未找到用户${userEmail}关联的Chromebook设备`); return null; } }
注意:在Google Apps Script里要先启用「Admin Directory」服务(通过编辑器的「服务」菜单添加)。
2. Chromebook管理、盘点与自动化发放流程实现
针对学校批量配发Chromebook的场景,我们可以用Google Apps Script + Google表单/Chrome轻应用的组合,实现从设备发放到绑定的全自动化,具体流程如下:
核心流程
设备发放给学生 → 学生用学校账号登录Chrome → 触发脚本(表单提交或Chrome应用)→ 脚本识别设备序列号 → 自动更新设备OU、绑定用户信息
第一步:让学生触发脚本的两种方案
方案A:Google表单触发
创建一个极简的Google表单,只需要学生确认提交(甚至可以不用填字段,因为脚本能自动获取登录用户的邮箱):
- 给表单添加「提交时触发」的Google Apps Script触发器。
- 在触发脚本里,用
Session.getActiveUser().getEmail()获取当前学生的学校邮箱,再调用上面的方法获取设备序列号。
方案B:Chrome轻应用触发
开发一个超轻量的Chrome应用,学生点击就能运行:
- 在
manifest.json中声明systemInfo权限,用来获取设备序列号:
{ "manifest_version": 3, "name": "设备绑定工具", "version": "1.0", "permissions": ["systemInfo", "identity"], "action": { "default_popup": "popup.html" } }
- 在
popup.js里获取序列号和用户邮箱,发送到部署好的Google Apps Script Web应用:
document.addEventListener('DOMContentLoaded', () => { // 获取设备序列号 chrome.system.info.get((deviceInfo) => { const serialNumber = deviceInfo.serialNumber; // 获取当前登录用户邮箱 chrome.identity.getProfileUserInfo((userInfo) => { const userEmail = userInfo.email; // 发送到Apps Script Web应用 fetch('https://script.google.com/macros/s/你的Web应用ID/exec', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ serial: serialNumber, email: userEmail }) }).then(res => res.text()) .then(msg => alert(msg)) .catch(err => alert('绑定失败:' + err)); }); }); });
第二步:自动化设备OU更新与用户绑定
拿到序列号和学生邮箱后,通过Admin SDK完成两个核心操作:
- 更新设备OU:把设备移动到对应年级/班级的OU(比如
/Students/Grade10/Class3)。 - 绑定用户:将设备的
userEmail字段设置为学生邮箱,完成关联。
示例代码(Google Apps Script):
function bindDeviceToUser(serialNumber, userEmail, targetOU) { const customerId = '你的Workspace客户ID'; // 先通过序列号查找设备ID const deviceList = AdminDirectory.Chromeosdevices.list(customerId, { query: `serialNumber:${serialNumber}` }); if (!deviceList.chromeosdevices || deviceList.chromeosdevices.length === 0) { throw new Error(`未找到序列号为${serialNumber}的设备`); } const deviceId = deviceList.chromeosdevices[0].deviceId; // 构造更新参数 const updatePayload = { userEmail: userEmail, orgUnitPath: targetOU }; // 执行更新 AdminDirectory.Chromeosdevices.update(updatePayload, customerId, deviceId); return `设备${serialNumber}已成功绑定用户${userEmail},并移动到OU:${targetOU}`; }
第三步:设备盘点功能实现
可以定期运行脚本,把所有Chromebook的信息导出到Google Sheets生成盘点报表:
function generateInventoryReport() { const customerId = '你的Workspace客户ID'; const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('设备盘点'); let pageToken = null; const inventoryRows = [['序列号', '绑定用户', '所在OU', '最后同步时间']]; // 分页获取所有设备(避免API限制) do { const deviceResponse = AdminDirectory.Chromeosdevices.list(customerId, { pageToken: pageToken, maxResults: 100 }); if (deviceResponse.chromeosdevices) { deviceResponse.chromeosdevices.forEach(device => { inventoryRows.push([ device.serialNumber, device.userEmail || '未绑定', device.orgUnitPath, new Date(device.lastSync).toLocaleString() ]); }); } pageToken = deviceResponse.nextPageToken; } while (pageToken); // 写入表格 sheet.clearContents(); sheet.getRange(1, 1, inventoryRows.length, 4).setValues(inventoryRows); console.log('设备盘点报表已生成'); }
你可以给这个脚本设置时间驱动触发器,比如每周自动运行一次,自动更新盘点表。
内容的提问来源于stack exchange,提问作者jembe
相关产品推荐
相关产品推荐

