通过 Google 报告 API 通过 google 脚本检索移动设备报告

Retrieve Mobile Device Report via Google Reports API via google scripts

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

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

非常感谢您的时间和投入! 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时,似乎在目录API中的“方法:mobiledevices.list”的方法中,需要customerId如下使用。

    customerId: The unique ID for the customer's Google Workspace account. As an account administrator, you can also use the my_customer alias to represent your account's customerId. The customerId is also returned as part of the Users resource.

    • 但是在你的脚本中,没有使用这个。由此,AdminDirectory.Mobiledevices.list 的参数不正确。我认为这就是您出现“Bad Request”问题的原因。
  • maxResults的最大值为100

  • orderBy的Enum的email好像是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.email, user.deviceId, user.model, user.type, user.status, user.lastSync]);
    }
  } else {
    Logger.log('No users found.');
  }
  pageToken = page.nextPageToken;
} while (pageToken);
if (rows.length > 0) {
  sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);
}

注:

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

参考: