首先,我對我的域具有管理員權限,但我無權訪問安全性。我正在與我的 IT 部門合作,該部門確實具有安全訪問權限,但是,我們發現的所有內容似乎都已在我們的帳戶中啟用。應用訪問控制設定為“信任內部、域擁有的應用”。每次我嘗試運行 UserUsageReport ( https://developers.google.com/apps-script/advanced/admin-sdk-reports#reference )的基本快速入門時,我都會收到錯誤訊息:
/**
* 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.
*/
function generateUserUsageReport() {
var today = new Date();
var oneWeekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);
var timezone = Session.getScriptTimeZone();
var date = Utilities.formatDate(oneWeekAgo, timezone, 'yyyy-MM-dd');
var parameters = [
'accounts:last_login_time',
'gmail:num_emails_received',
'drive:num_items_created'
];
var rows = [];
var pageToken;
var page;
do {
page = AdminReports.UserUsageReport.get('all', date, {
parameters: parameters.join(','),
maxResults: 500,
pageToken: pageToken
});
if (page.warnings) {
for (var i = 0; i < page.warnings.length; i ) {
var warning = page.warnings[i];
Logger.log(warning.message);
}
}
var reports = page.usageReports;
if (reports) {
for (var i = 0; i < reports.length; i ) {
var report = reports[i];
var parameterValues = getParameterValues(report.parameters);
var 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) {
var spreadsheet = SpreadsheetApp.create('G Suite User Usage Report');
var sheet = spreadsheet.getActiveSheet();
// Append the headers.
var 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);
Logger.log('Report spreadsheet created: %s', spreadsheet.getUrl());
} else {
Logger.log('No results returned.');
}
}
/**
* 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(function(result, parameter) {
var name = parameter.name;
var 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;
}, {});
}
我得到的錯誤是:
GoogleJsonResponseException: API call to reports.userUsageReport.get failed with error: Caller does not have access to the customers reporting data.
據我所知,我滿足上述鏈接的三個要求,分別是:
啟用 API 訪問
具有管理員權限的 Google 帳戶
訪問 Google 云端硬碟
那么為什么我不斷收到這個錯誤呢?我的 IT 部門是否缺少啟用此功能的設定?我可以完全訪問 directory_v1,但每次嘗試呼叫它時,reports_v1 都會給我同樣的錯誤。我們甚至按照此處的說明進行操作:https ://support.google.com/a/answer/7281227?visit_id=637781417279518974-3468793296&rd=1#zippy=,review-the-third-party-apps-in-your- environment, 阻止所有第三方 API 訪問
任何幫助表示贊賞。
uj5u.com熱心網友回復:
- 絕對嘗試在 API Explorer 中呼叫 @Fernando Lara 提到的相同方法來調查用戶權限并排除任何會話問題。
- 除此之外,請確保此腳本的呼叫者已啟用報告管理員權限,如本檔案所述。
- 您可能遇到的一種情況是關于腳本專案中的“作用域快取/呼叫者”。由于 Apps Scripts 編輯器會根據代碼背景關系自動控制授權范圍,因此我注意到有時當您修改域級別的權限時,專案中會保留某種范圍快取。為了解決這個問題,我只是將我的代碼剪切到記事本,添加一個空白函式呼叫
DriveApp.getFiles();,保存我的專案并運行這個方法。重新授權 Drive 范圍,讓它完成然后洗掉所有內容并再次粘貼您的代碼并運行它以再次觸發 OAuth 流程。
uj5u.com熱心網友回復:
我認為問題可能與您的帳戶可能具有的特定管理員角色有關。由于您提到您無權訪問管理控制臺的安全部分,這意味著您不是超級管理員,只是為您的帳戶分配了特定的管理員角色。
我建議首先使用API 資源管理器中的“嘗試此 API”功能進行測驗,只是為了放棄管理員角色問題。如果它失敗并出現相同的錯誤,則表示問題與管理員角色有關。或者您可以詢問您的用戶是否分配了報告管理員角色。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/419609.html
標籤:
