Исключить пользователей из принадлежности к определенной группе в G Suite

#google-apps-script #google-admin-sdk #google-workspace

#google-apps-script #google-admin-sdk #google-workspace

Вопрос:

Я пытаюсь написать сценарий в Google apps script, который приостановит действие учетной записи пользователей, чья учетная запись была неактивна более 120 дней. Но я не хочу, чтобы скрипт удалял учетные записи пользователей, входящих в определенную группу. Ниже приведен сценарий, который я придумал:

 /**
 * Lists all the users in a domain sorted by first name.
 */
function listAllUsers() {

  var contents = [];
  var pageToken;
  var page;
  do {
    page = AdminDirectory.Users.list({
      customer: 'xyz12345',
      orderBy: 'givenName',
      maxResults: 100,
      pageToken: pageToken
    });
    var users = page.users;
    if (users) {
      for (var i = 0; i < users.length; i  ) {
        var user = users[i];
        if(user.suspended==false){
          contents.push([user.name.fullName, user.primaryEmail, user.creationTime, user.lastLoginTime]);
        }
      }
    } else {
      Logger.log('No users found.');
    }
    pageToken = page.nextPageToken;
  } while (pageToken);
  checkUserLoginTime(contents);
}


/**
 * Check the user Log in Time of the users.
 * @param contents (The array containing the users list)
 */
function checkUserLoginTime(contents) {
  //Logger.log(contents);
  var usersToSuspend = [];
  var timeNow = new Date();
  var checkTime = new Date(); 
  checkTime.setDate(checkTime.getDate()-120);
  checkTime = new Date(checkTime);
  Logger.log('TimeNow:'  timeNow);
  Logger.log('checktime:'  checkTime);

  for (var i=0; i<contents.length; i  ){
    var fullName = contents[i][0];
    var email = contents[i][1];
    var formattedCreationTime = new Date(contents[i][2]);
    var formattedLastLoginTime = new Date(contents[i][3]);
    Logger.log(fullName);
    Logger.log(email);
    Logger.log(formattedCreationTime);
    Logger.log(formattedLastLoginTime);
    if(formattedCreationTime <= checkTime amp;amp; formattedLastLoginTime <= checkTime){
      usersToSuspend.push([fullName, email]); 
      Logger.log('The user account is Inactive')
      //suspendUsers(email);
    } else{
      Logger.log('The user account is Active')
    }
  }

}
 

Этот скрипт отправит в массив все учетные usersToSuspend записи пользователей, время последнего входа в систему которых превышало 120 дней. Есть ли способ отфильтровать этот массив или прекратить отправку электронных писем в этот массив, которые принадлежат определенной группе, скажем, например: xyz@gmail.com ?

Ответ №1:

Вот функция, которую я использую для проверки членства в группе по электронной почте пользователя.

 function testGroupMembership(groupEmail, testUser) {
    var group = GroupsApp.getGroupByEmail(groupEmail);
    var users = group.getUsers();
    for (var u = 0; u < users.length; u  ){
      if ( users[u].getEmail() === testUser){
        return true;
      }
  return false;
}
 

Передайте адрес электронной почты пользователя и адрес электронной почты группы. Если пользователь является участником, он возвращает true . Таким образом, вам придется указать «нет» или отменить это, чтобы приостановить действие учетной записи.

Ответ №2:

Сценарий, который, наконец, сработал для меня без создания отдельной функции или комплекса for loops , выглядит следующим образом:

 /**
 * Lists all the users in a domain sorted by first name.
 */
function listAllUsers() {

  var contents = [];
  var pageToken;
  var page;
  do {
    page = AdminDirectory.Users.list({
      customer: 'xyz12345',
      orderBy: 'givenName',
      maxResults: 100,
      pageToken: pageToken
    });
    var users = page.users;
    if (users) {
      for (var i = 0; i < users.length; i  ) {
        var user = users[i];
        if(user.suspended==false){
          contents.push([user.name.fullName, user.primaryEmail, user.creationTime, user.lastLoginTime]);
        }
      }
    } else {
      Logger.log('No users found.');
    }
    pageToken = page.nextPageToken;
  } while (pageToken);
  checkUserLoginTime(contents);
}


/**
 * Check the user Log in Time of the users.
 * @param contents (The array containing the users list)
 */
function checkUserLoginTime(contents) {
  //Logger.log(contents);
  var usersToSuspend = [];
  var timeNow = new Date();
  var checkTime = new Date();
  var group = GroupsApp.getGroupByEmail("xyz@gmail.com");     // gets the group
  var users = group.getUsers();     // gets the users in the group
  checkTime.setDate(checkTime.getDate()-120);
  checkTime = new Date(checkTime);
  Logger.log('TimeNow:'  timeNow);
  Logger.log('checktime:'  checkTime);

  for (var i=0; i<contents.length; i  ){
    var fullName = contents[i][0];
    var email = contents[i][1];
    var formattedCreationTime = new Date(contents[i][2]);
    var formattedLastLoginTime = new Date(contents[i][3]);
    Logger.log(fullName);
    Logger.log(email);
    Logger.log(formattedCreationTime);
    Logger.log(formattedLastLoginTime);
    if(formattedCreationTime <= checkTime amp;amp; formattedLastLoginTime <= checkTime){
      if (group.hasUser(email)) {     //checks if the user is part of the group
        Logger.log(email   ' belongs to xyz@gmail.com group');
      } else{
       usersToSuspend.push([fullName, email]); 
       Logger.log('The user account is Inactive')
       //suspendUsers(email);
      }
    } else{
      Logger.log('The user account is Active')
    }
  }

}
 

Group.hasUser(электронная почта) устраняет необходимость запускать for if цикл and .