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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:21