Скрипт для удаления учетной записи пользователя из G Suite Admin SDK

Я пишу сценарий, который извлекает данные из электронной таблицы и на основе каждой записи, введенной в электронную таблицу, извлекает данные, которые в основном являются адресами электронной почты, и удаляет учетную запись пользователя из домена.

//** 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.


person merilstack    schedule 05.04.2018    source источник


Ответы (2)


Вы отправляете e в deleteUsers(), но эта функция не получает никаких параметров. Нет необходимости обращаться к данным электронной таблицы, если они уже предоставлены onFormSubmit() - посмотрите на документацию по объекту события для справки.

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);
}

Чтобы убедиться, что ваш триггер правильно настроен, сначала сохраните ответы формы в вашей электронной таблице. Затем выберите «Правка»> «Триггеры текущего проекта» и скопируйте следующие настройки:  введите описание изображения здесь

Чтобы AdminDirectory заработал, вам необходимо включить дополнительные службы. (В редакторе скриптов перейдите в раздел Ресурсы> Расширенные службы Google и включите Admin Directory API. Затем щелкните ссылку внизу модального окна, чтобы включить Admin SDK в консоли API.)  введите здесь описание изображения

Если я ошибался относительно того, какие данные собирает форма, и вам действительно нужно извлечь данные из электронной таблицы (при условии, что форма не подключена к листу), тогда вам нужно создать триггер для отправки этой формы. Запустите эту функцию, чтобы установить триггер.

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 и logging.

person Diego    schedule 05.04.2018
comment
Спасибо за замечательный ответ @Diego, электронная таблица на самом деле содержит ответ, полученный из формы и с которым связана электронная таблица. Кроме того, если я хочу просто приостановить действие учетной записи, есть ли способ? Я пробовал с AdminDirectory.Users.update({'suspended':true}, email), но это не помогает. - person merilstack; 05.04.2018
comment
На самом деле я пытаюсь удалить учетную запись пользователя, когда пользователь отправляет форму Google (для отключения) с идентификатором электронной почты, он должен просто приостановить или удалить учетную запись. - person merilstack; 05.04.2018
comment
Я не совсем уверен, но смотрю пример кода для псевдонимы, попробуйте {suspended: true} или {suspended: 'true'}. В примере с псевдонимом я вижу, что они не заключают имена свойств в кавычки. - person Diego; 05.04.2018
comment
Спасибо, но хотя у меня есть данные в электронной таблице ibb.co/kUGXcH, для кода отображается Resource Not Found: userKey var response = AdminDirectory.Users.update({suspended:'true'},email); ibb.co/fAcxcH, я также создал фиктивную учетную запись с идентификатором электронной почты в G Suite, но ее все еще показывает ошибку, есть помощь? - person merilstack; 05.04.2018
comment
Попробуйте сначала получить пользователя, а затем искать их пользовательский ключ в возвращенном объекте. - person Diego; 05.04.2018

Было бы лучше использовать AdminDirectory.Users.remove(email);, чем делать запрос к API, как это делаете вы.

Сохраните его в переменной, если хотите регистрировать ответ var request = AdminDirectory.Users.remove(data[i][1]);

Чтобы активировать AdminDirectory;

  1. Перейдите в Ресурсы -> Расширенные службы Google  введите описание изображения здесь

  2. Включите Admin Directory, а затем нажмите ссылку на консоль Google API. введите описание изображения здесь

  3. Щелкните Включить API и службы  введите описание изображения здесь
  4. Найдите Admin SDK  введите описание изображения здесь
  5. Нажмите Admin SDK, а затем нажмите «Включить».
person James D    schedule 05.04.2018
comment
Когда я попробовал это в коде, он показывал ошибку ReferenceError: "AdminDirectory" is not defined.. Разве это не AdminDirectory встроенный класс? - person merilstack; 05.04.2018
comment
Если вы намереваетесь распространить эту форму среди членов вашего домена, чтобы они могли использовать ее для удаления пользователей, я бы посоветовал этого не делать или, по крайней мере, я бы не стал делать это в FormSubmit. - person James D; 05.04.2018
comment
Спасибо @ james-donnellan за ответ. Если я хочу просто приостановить действие учетной записи, есть ли способ? Я пробовал с AdminDirectory.Users.update({'suspended':true}, email), но это не помогает. - person merilstack; 05.04.2018
comment
На самом деле я пытаюсь удалить учетную запись пользователя, когда пользователь отправляет форму Google (для отключения) с идентификатором электронной почты, он должен просто приостановить или удалить учетную запись. - person merilstack; 05.04.2018
comment
AdminDirectory.Users.update({'suspended':true}, email) у меня работает нормально, попробуйте войти и посмотреть ответ. Logger.log(AdminDirectory.Users.update({'suspended':true}, email) - person James D; 05.04.2018
comment
Спасибо, но хотя у меня есть данные в электронной таблице ibb.co/kUGXcH, для кода отображается Resource Not Found: userKey var response = AdminDirectory.Users.update({suspended:'true'},email); ibb.co/fAcxcH, я также создал фиктивную учетную запись с идентификатором электронной почты в G Suite, но ее все еще показывает ошибку, есть помощь? - person merilstack; 05.04.2018
comment
Просто для подтверждения: response = AdminDirectory.Users.update ({'disabled': true}, '[email protected]'); обратите внимание на положение кавычек. Также убедитесь, что вы пропускаете строку заголовка. Было бы лучше отредактировать OP с текущим кодом и вопросом. - person James D; 06.04.2018
comment
Спасибо @James, это помогло - person merilstack; 07.04.2018