通过谷歌脚本通过谷歌报告 API 检索移动设备报告 修改点:修改后的脚本:注意:参考:

问题描述

我正在尝试检索移动设备报告,但我不断收到此错误:“对 directory.mobiledevices.list 的 API 调用失败,错误错误请求”。

我认为问题在于 customerId。我应该使用什么来检索所有移动设备信息?我试过使用“all”并定义域名,但没有成功。

必须感谢您的时间和投入! TIA!

function mobileReport() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName('SHEETNAME');
  sheet.clear();

  // Append the headers.
  var headers = ['Full Name','Email','Device Id','Model','Type','Status','Last Sync'];
  sheet.appendRow(headers).setFrozenRows(1);

  var rows = [];
  var pagetoken;
  var count = 0;

  do {
    var page = AdminDirectory.Mobiledevices.list({
     orderBy: 'email',maxResults: 500,pagetoken: pagetoken    
    });
    var users = page.mobiledevices;
    if (users) {
      for (var i = 0; i < users.length; i++) {
        var user = users[i];           
        rows.push([user.name,user.email,user.deviceid,user.model,user.type,user.status,user.lastSync]);
      }
      // Append the results.
      sheet.getRange(2,1,rows.length,headers.length).setValues(rows);
    } 
    else {
    Logger.log('No users found.');
  } 
    pagetoken = page.nextPagetoken;
  } while (pagetoken);
}

解决方法

修改点:

  • 当我看到the official document时,好像在Directory API中的“Method: mobiledevices.list”方法中,customerId需要如下使用。

    customerId:客户的 Google Workspace 帐户的唯一 ID。作为帐户管理员,您还可以使用 my_customer 别名来表示您帐户的 customerId。 customerId 也作为 Users resource 的一部分返回。

    • 但是在您的脚本中,没有使用它。因此,AdminDirectory.Mobiledevices.list 的参数是不正确的。我认为这就是您的“错误请求”问题的原因。
  • maxResults 的最大值为 100

  • orderBy 的 Enum 的电子邮件似乎是 EMAILRef

  • 在您的脚本中,setValues 用于循环并使用相同的范围。在这种情况下,每个循环都会覆盖这些值。

当以上几点反映到你的脚本中时,它变成如下。

修改后的脚本:

请按如下方式修改您的脚本。

从:
var rows = [];
var pageToken;
var count = 0;

do {
  var page = AdminDirectory.Mobiledevices.list({
   orderBy: 'email',maxResults: 500,pageToken: pageToken    
  });
  var users = page.mobiledevices;
  if (users) {
    for (var i = 0; i < users.length; i++) {
      var user = users[i];           
      rows.push([user.name,user.email,user.deviceId,user.model,user.type,user.status,user.lastSync]);
    }
    // Append the results.
    sheet.getRange(2,1,rows.length,headers.length).setValues(rows);
  } 
  else {
  Logger.log('No users found.');
} 
  pageToken = page.nextPageToken;
} while (pageToken);
到:
var customerId = "###"; // <--- Please set customerId.

var rows = [];
var pageToken;
var count = 0;  // It seems that this variable is not used in the script.
do {
  var page = AdminDirectory.Mobiledevices.list(customerId,{
    orderBy: 'EMAIL',maxResults: 100,pageToken: pageToken
  });
  var users = page.mobiledevices;
  if (users.length > 0) {
    for (var i = 0; i < users.length; i++) {
      var user = users[i];
      rows.push([user.name,user.lastSync]);
    }
  } else {
    Logger.log('No users found.');
  }
  pageToken = page.nextPageToken;
} while (pageToken);
if (rows.length > 0) {
  sheet.getRange(2,headers.length).setValues(rows);
}

注意:

  • 在这个修改后的脚本中,假设您可以使用 AdminDirectory.Mobiledevices.list 检索值。请注意这一点。

参考: