没有共享文件的用户驱动器的使用
User Drive's usage without shared files
我想为所有用户创建存储使用情况报告。为此,我使用 AdminReports 应用程序,就像这样(在某处的 google 示例中找到。只需调整 "parameters" 和 "row" 数组):
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:gmail_used_quota_in_mb',
'accounts:drive_used_quota_in_mb',
'accounts:total_quota_in_mb ',
'accounts:used_quota_in_percentage'
];
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,
parseInt(parameterValues['accounts:drive_used_quota_in_mb']),
parseInt(parameterValues['accounts:gmail_used_quota_in_mb']),
parseInt(parameterValues['accounts:total_quota_in_mb']),
((parseInt(parameterValues['accounts:gmail_used_quota_in_mb'])+parseInt(parameterValues['accounts:drive_used_quota_in_mb']))/parseInt(parameterValues['accounts:total_quota_in_mb']))*100
];
rows.push(row);
}
}
pageToken = page.nextPageToken;
} while (pageToken);
if (rows.length > 0) {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
// Append the headers.
var headers = [['Date', 'User mail', 'Drive use','Gmail use', 'Total available',
'Total(%)']];
sheet.getRange(1, 1, 1, 6).setValues(headers);
// Append the results.
sheet.getRange(2, 1, rows.length, 6).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;
}, {});
}
我遇到的问题是参数 "accounts:drive_used_quota_in_mb" 为您提供了共享文件的驱动器使用情况(这与计算用户使用的存储空间无关(以确定他是否需要更多 space 或不)).
我什至尝试使用 'accounts:used_quota_in_percentage',这似乎正是我所需要的,但它计算百分比的方式与我相同:((drive + mail)/total space)* 100,而且没有办法忽略共享文件。
我正在研究检查驱动器的每个文件的可能性,但你知道下一个问题:缓慢..(仅对于 1 个用户,文档很少,需要 1-2 分钟)
有没有办法通过脚本、另一个 class 或在 google 中为它完成的我没有看到的东西来做到这一点?
感谢您的阅读,请原谅我的英语。
好的,没问题,我只是吓坏了,因为一个用户虽然他的账户只有2个月,但他的消费是30Go。
但和他商量后,他确实在一周前上传了大文件,后来,他删除了。
并且仅在 2 天前执行脚本给出了正确的结果,因为他在这两个日期之间删除了这些文件。
我犯错的原因是我的脚本提供了 1 周前的统计数据(我没有意识到这一点),并且我在 Web 界面上检查了这些统计数据的准确性,这与现在的统计数据有关。
我想为所有用户创建存储使用情况报告。为此,我使用 AdminReports 应用程序,就像这样(在某处的 google 示例中找到。只需调整 "parameters" 和 "row" 数组):
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:gmail_used_quota_in_mb',
'accounts:drive_used_quota_in_mb',
'accounts:total_quota_in_mb ',
'accounts:used_quota_in_percentage'
];
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,
parseInt(parameterValues['accounts:drive_used_quota_in_mb']),
parseInt(parameterValues['accounts:gmail_used_quota_in_mb']),
parseInt(parameterValues['accounts:total_quota_in_mb']),
((parseInt(parameterValues['accounts:gmail_used_quota_in_mb'])+parseInt(parameterValues['accounts:drive_used_quota_in_mb']))/parseInt(parameterValues['accounts:total_quota_in_mb']))*100
];
rows.push(row);
}
}
pageToken = page.nextPageToken;
} while (pageToken);
if (rows.length > 0) {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
// Append the headers.
var headers = [['Date', 'User mail', 'Drive use','Gmail use', 'Total available',
'Total(%)']];
sheet.getRange(1, 1, 1, 6).setValues(headers);
// Append the results.
sheet.getRange(2, 1, rows.length, 6).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;
}, {});
}
我遇到的问题是参数 "accounts:drive_used_quota_in_mb" 为您提供了共享文件的驱动器使用情况(这与计算用户使用的存储空间无关(以确定他是否需要更多 space 或不)).
我什至尝试使用 'accounts:used_quota_in_percentage',这似乎正是我所需要的,但它计算百分比的方式与我相同:((drive + mail)/total space)* 100,而且没有办法忽略共享文件。
我正在研究检查驱动器的每个文件的可能性,但你知道下一个问题:缓慢..(仅对于 1 个用户,文档很少,需要 1-2 分钟)
有没有办法通过脚本、另一个 class 或在 google 中为它完成的我没有看到的东西来做到这一点?
感谢您的阅读,请原谅我的英语。
好的,没问题,我只是吓坏了,因为一个用户虽然他的账户只有2个月,但他的消费是30Go。
但和他商量后,他确实在一周前上传了大文件,后来,他删除了。
并且仅在 2 天前执行脚本给出了正确的结果,因为他在这两个日期之间删除了这些文件。
我犯错的原因是我的脚本提供了 1 周前的统计数据(我没有意识到这一点),并且我在 Web 界面上检查了这些统计数据的准确性,这与现在的统计数据有关。