Admin SDK 報告服務可讓您在 Apps Script 中使用 Admin SDK 的 Reports API。這個 API 可讓 Google Workspace 網域 (包括經銷商) 的管理員為網域建立自訂用量報表。
參考資料
如要進一步瞭解這項服務,請參閱 Admin SDK Reports API 的參考說明文件。如同 Apps Script 的所有進階服務,Admin SDK 報告服務會使用與公用 API 相同的物件、方法和參數。詳情請參閱「如何判定方法簽章」一文。
如要回報問題及尋找其他支援,請參閱 Admin SDK 報告支援指南。
程式碼範例
下方程式碼範例使用第 1 版的 API。
產生登入活動報告
這個範例會以試算表形式產生上週的登入活動報告。報告會包含時間、使用者和登入結果。
advanced/adminSDK.gs
/** * Generates a login activity report for the last week as a spreadsheet. The * report includes the time, user, and login result. * @see https://developers.google.com/admin-sdk/reports/reference/rest/v1/activities/list */ function generateLoginActivityReport() { const now = new Date(); const oneWeekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000); const startTime = oneWeekAgo.toISOString(); const endTime = now.toISOString(); const rows = []; let pageToken; let page; do { page = AdminReports.Activities.list('all', 'login', { startTime: startTime, endTime: endTime, maxResults: 500, pageToken: pageToken }); const items = page.items; if (items) { for (const item of items) { const row = [ new Date(item.id.time), item.actor.email, item.events[0].name ]; rows.push(row); } } pageToken = page.nextPageToken; } while (pageToken); if (rows.length === 0) { console.log('No results returned.'); return; } const spreadsheet = SpreadsheetApp.create('Google Workspace Login Report'); const sheet = spreadsheet.getActiveSheet(); // Append the headers. const headers = ['Time', 'User', 'Login Result']; sheet.appendRow(headers); // Append the results. sheet.getRange(2, 1, rows.length, headers.length).setValues(rows); console.log('Report spreadsheet created: %s', spreadsheet.getUrl()); }
產生使用者使用情形報告
這個範例會以試算表形式產生上一天的使用者用量報表。報告中會包含日期、使用者、上次登入時間、收到的電子郵件數,以及擁有的文件數量。
advanced/adminSDK.gs
/** * Generates a user usage report for this day last week as a spreadsheet. The * report includes the date, user, last login time, number of emails received, * and number of drive files created. * @see https://developers.google.com/admin-sdk/reports/reference/rest/v1/userUsageReport/get */ function generateUserUsageReport() { const today = new Date(); const oneWeekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000); const timezone = Session.getScriptTimeZone(); const date = Utilities.formatDate(oneWeekAgo, timezone, 'yyyy-MM-dd'); const parameters = [ 'accounts:last_login_time', 'gmail:num_emails_received', 'drive:num_items_created' ]; const rows = []; let pageToken; let page; do { page = AdminReports.UserUsageReport.get('all', date, { parameters: parameters.join(','), maxResults: 500, pageToken: pageToken }); if (page.warnings) { for (const warning of page.warnings) { console.log(warning.message); } } const reports = page.usageReports; if (reports) { for (const report of reports) { const parameterValues = getParameterValues(report.parameters); const row = [ report.date, report.entity.userEmail, parameterValues['accounts:last_login_time'], parameterValues['gmail:num_emails_received'], parameterValues['drive:num_items_created'] ]; rows.push(row); } } pageToken = page.nextPageToken; } while (pageToken); if (rows.length === 0) { console.log('No results returned.'); return; } const spreadsheet = SpreadsheetApp.create('Google Workspace User Usage Report'); const sheet = spreadsheet.getActiveSheet(); // Append the headers. const headers = ['Date', 'User', 'Last Login', 'Num Emails Received', 'Num Drive Files Created']; sheet.appendRow(headers); // Append the results. sheet.getRange(2, 1, rows.length, headers.length).setValues(rows); console.log('Report spreadsheet created: %s', spreadsheet.getUrl()); } /** * Gets a map of parameter names to values from an array of parameter objects. * @param {Array} parameters An array of parameter objects. * @return {Object} A map from parameter names to their values. */ function getParameterValues(parameters) { return parameters.reduce((result, parameter) => { const name = parameter.name; let value; if (parameter.intValue !== undefined) { value = parameter.intValue; } else if (parameter.stringValue !== undefined) { value = parameter.stringValue; } else if (parameter.datetimeValue !== undefined) { value = new Date(parameter.datetimeValue); } else if (parameter.boolValue !== undefined) { value = parameter.boolValue; } result[name] = value; return result; }, {}); }