用于从G Suite Admin SDK删除用户帐户的脚本

时间:2018-04-05 03:50:09

标签: javascript google-apps-script gsuite

我正在编写一个从电子表格中获取数据的脚本,并根据电子表格中输入的每个条目,它会提取基本上是电子邮件地址的数据,并从域中删除用户的帐户。

//** 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实现它,但不知道如何使用它。有任何想法吗?对不起,如果这是一个愚蠢的问题!我是谷歌脚本的新手。

2 个答案:

答案 0 :(得分:1)

最好使用AdminDirectory.Users.remove(email);,而不是像对待API那样向API发出请求。

如果要记录响应var request = AdminDirectory.Users.remove(data[i][1]);

,请将其保存在变量中

激活AdminDirectory;

  1. 转到资源 - &gt;高级Google服务 enter image description here

  2. 启用管理员目录,然后点击指向Google API控制台的链接。 enter image description here

  3. 单击“启用API和服务” enter image description here
  4. 搜索Admin SDK enter image description here
  5. 点击Admin SDK,然后点击“启用”

答案 1 :(得分:1)

您正在向e发送deleteUsers(),但该功能未收到任何参数。如果onFormSubmit()已经提供了电子表格数据,则无需访问它 - 请查看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);
}

要确保您的触发器设置正确,请先将表单回复保存到电子表格中。然后编辑&gt;当前项目触发并复制这些设置: enter image description here

要使AdminDirectory有效,您需要enable advanced services。 (在脚本编辑器中,转到“资源”&gt;“高级Google服务”并在“管理目录API”上切换。然后单击模式底部的链接以在API控制台中启用Admin SDK。) enter image description here

如果我误解了表单收集的数据,并且您确实需要从电子表格中提取数据(假设表单未连接到表单),那么您需要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...catchlogging