从 G Suite Admin SDK 中删除用户帐户的脚本
Script to delete a user account from G Suite Admin SDK
我正在编写一个脚本,从传播 sheet 中获取数据,并基于传播中输入的每个条目 sheet,它获取基本上是电子邮件地址的数据并删除用户的来自域的帐户。
//** Delete the users on submitting the "Submit" button
function onFormSubmit(e) {
//Logger.log(e);
//Run this function passing on event "e" when the form is submitted.
//Object e has form parameters sourced from the sheet attached to the form
deleteUsers(e);
}
//Logs all the info from the spreadsheet and deletes the user
function deleteUsers() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
Logger.log('managerEmail: ' + data[i][0]);
Logger.log('email: ' + data[i][1]);
Logger.log('trasferToEmail: ' + data[i][3]);
var managerEmail = data[i][0];
var email = data[i][1];
var trasferToEmail = data[i][3];
var request = {
'url': 'https://www.googleapis.com/admin/directory/v1/users/' + email,
'method' : 'DELETE'
};
}
但是我还是删除账号不成功。我实际上尝试根据此文档 https://developers.google.com/admin-sdk/directory/v1/reference/users/delete 实现它,但不知道如何使用它。有任何想法吗?对不起,如果这是一个愚蠢的问题!我是 Google 脚本的新手。
最好使用 AdminDirectory.Users.remove(email);
而不是像您现在那样向 API 发出请求。
如果您想记录响应,请将其保存在变量中 var request = AdminDirectory.Users.remove(data[i][1]);
激活 AdminDirectory;
转到资源 -> 高级 Google 服务
启用管理目录,然后单击 link 进入 Google API 控制台。
- 单击启用 API 和服务
- 搜索管理 SDK
- 点击 Admin SDK,然后点击 'Enable'
您正在将 e
发送到 deleteUsers()
,但该函数不接收任何参数。当 onFormSubmit()
已经提供时,无需访问 spreadsheet 数据——查看 event object documentation 以供参考。
function deleteUser(e) {
var data = e.namedValues;
var managerEmail = data["Manager Email"][0]; //You'll need to adjust the field names to match with your form data
var email = data["Email"][0];
var transferToEmail = data["Transfer to Email"][0];
var response = AdminDirectory.Users.remove(email);
}
为确保您的触发器设置正确,请先将表单回复保存到您的传播sheet。然后编辑 > 当前项目的触发器并复制这些设置:
要使 AdminDirectory
正常工作,您需要 enable advanced services。 (在脚本编辑器中,转到 Resources > Advanced Google services 并切换 "on" Admin Directory API。然后单击模式底部的 link 以启用 Admin API 控制台中的 SDK。)
如果我弄错了表单正在收集的数据,而您确实需要从 spreadsheet 中提取数据(假设表单未连接到 sheet),那么您需要 create a trigger 才能提交该表单。 运行这个函数要安装触发器。
function installFormTrigger() {
var form = FormApp.openById("FORM_ID");
ScriptApp.newTrigger("deleteUsers")
.forForm(form)
.onFormSubmit()
.create();
}
然后您原来的 deleteUsers()
函数几乎可以像您使用的那样工作,但增加了 AdminDirectory
。
function deleteUsers() {
var sheet = SpreadsheetApp.getActive().getSheetByName("SheetName"); //HIGHLY recommend using this instead
var data = sheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
var managerEmail = data[i][0];
var email = data[i][1];
var trasferToEmail = data[i][3];
var response = AdminDirectory.Users.remove(email);
}
}
请注意,在您的 for 循环中,您可能会遇到无效的电子邮件或 AdminDirectory
可能会遇到错误,因此我建议实施 try...catch and logging.
我正在编写一个脚本,从传播 sheet 中获取数据,并基于传播中输入的每个条目 sheet,它获取基本上是电子邮件地址的数据并删除用户的来自域的帐户。
//** Delete the users on submitting the "Submit" button
function onFormSubmit(e) {
//Logger.log(e);
//Run this function passing on event "e" when the form is submitted.
//Object e has form parameters sourced from the sheet attached to the form
deleteUsers(e);
}
//Logs all the info from the spreadsheet and deletes the user
function deleteUsers() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
Logger.log('managerEmail: ' + data[i][0]);
Logger.log('email: ' + data[i][1]);
Logger.log('trasferToEmail: ' + data[i][3]);
var managerEmail = data[i][0];
var email = data[i][1];
var trasferToEmail = data[i][3];
var request = {
'url': 'https://www.googleapis.com/admin/directory/v1/users/' + email,
'method' : 'DELETE'
};
}
但是我还是删除账号不成功。我实际上尝试根据此文档 https://developers.google.com/admin-sdk/directory/v1/reference/users/delete 实现它,但不知道如何使用它。有任何想法吗?对不起,如果这是一个愚蠢的问题!我是 Google 脚本的新手。
最好使用 AdminDirectory.Users.remove(email);
而不是像您现在那样向 API 发出请求。
如果您想记录响应,请将其保存在变量中 var request = AdminDirectory.Users.remove(data[i][1]);
激活 AdminDirectory;
转到资源 -> 高级 Google 服务
启用管理目录,然后单击 link 进入 Google API 控制台。
- 单击启用 API 和服务
- 搜索管理 SDK
- 点击 Admin SDK,然后点击 'Enable'
您正在将 e
发送到 deleteUsers()
,但该函数不接收任何参数。当 onFormSubmit()
已经提供时,无需访问 spreadsheet 数据——查看 event object documentation 以供参考。
function deleteUser(e) {
var data = e.namedValues;
var managerEmail = data["Manager Email"][0]; //You'll need to adjust the field names to match with your form data
var email = data["Email"][0];
var transferToEmail = data["Transfer to Email"][0];
var response = AdminDirectory.Users.remove(email);
}
为确保您的触发器设置正确,请先将表单回复保存到您的传播sheet。然后编辑 > 当前项目的触发器并复制这些设置:
要使 AdminDirectory
正常工作,您需要 enable advanced services。 (在脚本编辑器中,转到 Resources > Advanced Google services 并切换 "on" Admin Directory API。然后单击模式底部的 link 以启用 Admin API 控制台中的 SDK。)
如果我弄错了表单正在收集的数据,而您确实需要从 spreadsheet 中提取数据(假设表单未连接到 sheet),那么您需要 create a trigger 才能提交该表单。 运行这个函数要安装触发器。
function installFormTrigger() {
var form = FormApp.openById("FORM_ID");
ScriptApp.newTrigger("deleteUsers")
.forForm(form)
.onFormSubmit()
.create();
}
然后您原来的 deleteUsers()
函数几乎可以像您使用的那样工作,但增加了 AdminDirectory
。
function deleteUsers() {
var sheet = SpreadsheetApp.getActive().getSheetByName("SheetName"); //HIGHLY recommend using this instead
var data = sheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
var managerEmail = data[i][0];
var email = data[i][1];
var trasferToEmail = data[i][3];
var response = AdminDirectory.Users.remove(email);
}
}
请注意,在您的 for 循环中,您可能会遇到无效的电子邮件或 AdminDirectory
可能会遇到错误,因此我建议实施 try...catch and logging.