我如何自动导出 GWS 上的所有用户和状态(活动、暂停、已存档),然后将报告发送到用户列表

问题描述 投票:0回答:1

我正在尝试在我的 Google Workspace 帐户上自动生成用户报告,显示他们的状态,并每月通过电子邮件将报告发送给收件人列表。

我正在尝试使用以下脚本获取所有用户的状态:

function generateUserReport() {
  const spreadsheet = SpreadsheetApp.getActive();
  const userReportSheet = spreadsheet.getSheetByName('User Report');
  const shareWithEmails = ['[email protected]', '[email protected]']; // Replace with the email addresses you want to share the report with

  const userResult = [];

  const users = getAllUsers();

  users.forEach(user => {
    let status;
    if (user.suspended == true) {
      status = "suspended";
    } else if (user.archived == true) {
      status = "archived";
    } else {
      status = "active";
    }


    let userItem = {
      "primaryEmail" : user.primaryEmail,
      "status" : status,
      "archived" : user.archived,
      "suspended" : user.suspended,
      "isAdmin" : user.isAdmin
    }
    userResult.push(userItem);
  })
  
  jsonToSheet_(userResult, "User Report");
  //shareSpreadsheet(spreadsheet, shareWithEmails);
  //notifyUsers(spreadsheet, shareWithEmails);
}

function getAllUsers() {
  let users = [];
  let pageToken;
  do {
    const response = AdminDirectory.Users.list({
      customer: 'my_customer',
      maxResults: 500,
      orderBy: 'email',
      pageToken: pageToken
    });
    users = users.concat(response.users);
    pageToken = response.nextPageToken;
  } while (pageToken);
  return users;
}


function shareSpreadsheet(spreadsheet, shareWithEmails) {
  shareWithEmails.forEach(email => {
    spreadsheet.addEditor(email);
  });
}

function notifyUsers(spreadsheet, shareWithEmails) {
  const url = spreadsheet.getUrl();
  shareWithEmails.forEach(email => {
    MailApp.sendEmail({
      to: email,
      subject: 'Monthly User Account Status Report',
      body: `The user account status report has been generated and shared with you. You can access it here: ${url}`
    });
  });
}

function createMonthlyTrigger() {
  const triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(trigger => {
    if (trigger.getHandlerFunction() === 'generateUserReport') {
      ScriptApp.deleteTrigger(trigger);
    }
  });

  ScriptApp.newTrigger('generateUserReport')
    .timeBased()
    .onMonthDay(1) // Adjust the day as needed
    .atHour(9) // Adjust the hour as needed
    .create();
}

但是,当我运行或调试脚本时,我收到此错误消息(还附上了错误消息的屏幕截图

错误信息

执行日志 3:35:55PM 通知执行开始 下午 3:37:59 错误
ReferenceError:未定义 AdminDirectory getAllUsers @Code.gs:40 生成用户报告@Code.gs:8

google-apps-script google-workspace google-admin-sdk
1个回答
0
投票

您可能尚未启用 Directory API。请查看官方快速入门 -> https://developers.google.com/admin-sdk/directory/v1/quickstart/apps-script

© www.soinside.com 2019 - 2024. All rights reserved.