/** * 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 */functiongenerateLoginActivityReport(){constnow=newDate();constoneWeekAgo=newDate(now.getTime()-7*24*60*60*1000);conststartTime=oneWeekAgo.toISOString();constendTime=now.toISOString();constrows=[];letpageToken;letpage;do{page=AdminReports.Activities.list("all","login",{startTime:startTime,endTime:endTime,maxResults:500,pageToken:pageToken,});constitems=page.items;if(items){for(constitemofitems){constrow=[newDate(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;}constspreadsheet=SpreadsheetApp.create("Google Workspace Login Report");constsheet=spreadsheet.getActiveSheet();// Append the headers.constheaders=["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());}
/** * 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 */functiongenerateUserUsageReport(){consttoday=newDate();constoneWeekAgo=newDate(today.getTime()-7*24*60*60*1000);consttimezone=Session.getScriptTimeZone();constdate=Utilities.formatDate(oneWeekAgo,timezone,"yyyy-MM-dd");constparameters=["accounts:last_login_time","gmail:num_emails_received","drive:num_items_created",];constrows=[];letpageToken;letpage;do{page=AdminReports.UserUsageReport.get("all",date,{parameters:parameters.join(","),maxResults:500,pageToken:pageToken,});if(page.warnings){for(constwarningofpage.warnings){console.log(warning.message);}}constreports=page.usageReports;if(reports){for(constreportofreports){constparameterValues=getParameterValues(report.parameters);constrow=[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;}constspreadsheet=SpreadsheetApp.create("Google Workspace User Usage Report",);constsheet=spreadsheet.getActiveSheet();// Append the headers.constheaders=["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. */functiongetParameterValues(parameters){returnparameters.reduce((result,parameter)=>{constname=parameter.name;letvalue;if(parameter.intValue!==undefined){value=parameter.intValue;}elseif(parameter.stringValue!==undefined){value=parameter.stringValue;}elseif(parameter.datetimeValue!==undefined){value=newDate(parameter.datetimeValue);}elseif(parameter.boolValue!==undefined){value=parameter.boolValue;}result[name]=value;returnresult;},{});}