Remove inactive users from groups and if user is part of more than 5 groups then do not remove

NishantDhole
Mega Guru

Hi,

Please find below interesting use case which is asked in one of interview.

 

Use Case : Remove inactive users from groups and if user is part of more than 5 groups then do not remove from the group and print user name and email. write a script for it.

3 ACCEPTED SOLUTIONS

Amitoj Wadhera
Kilo Sage

Hi @NishantDhole ,

 

You're correct. 

Here's the revised script:

// Define the query for inactive users
var inactiveUsers = new GlideRecord('sys_user');
inactiveUsers.addQuery('active', false);
inactiveUsers.query();

while (inactiveUsers.next()) {
    var userSysId = inactiveUsers.sys_id;
    var userGroupMembership = new GlideRecord('sys_user_grmember');
    userGroupMembership.addQuery('user', userSysId);
    userGroupMembership.query();

    var groupCount = 0;
    while (userGroupMembership.next()) {
        groupCount++;
    }

    if (groupCount >= 5) {
        // If the user is part of 5 or more groups, print their details
        gs.print('User with 5 or more groups: ' + inactiveUsers.user_name + ' (' + inactiveUsers.email + ')');
    } else {
        // If the user is part of fewer than 5 groups, remove them from all groups
        userGroupMembership.query(); // Re-query to get the records again
        while (userGroupMembership.next()) {
            userGroupMembership.deleteRecord();
        }
    }
}

 

If you find my response helpful, please consider marking it as the 'Accepted Solution' and giving it a 'Helpful' rating. Your feedback not only supports the community but also encourages me to continue providing valuable assistance.

 

Thanks,

Amitoj Wadhera

View solution in original post

Hiteish222
Kilo Guru

Hi @NishantDhole ,

for above use case use below script,

// Get all inactive users
var grUser = new GlideRecord('sys_user');
grUser.addQuery('active', false);
grUser.query();

while (grUser.next()) {
  
  // Get the number of groups the user is a member of
  var grUserGrMember = new GlideRecord('sys_user_grmember');
  grUserGrMember.addQuery('user', grUser.sys_id);
  grUserGrMember.query();
  var groupCount = grUserGrMember.getRowCount();
  
  // If the user is a member of less than 5 groups, remove them from their groups
  if (groupCount < 5) {
    grUserGrMember.query();
    while (grUserGrMember.next()) {
      grUserGrMember.deleteRecord();
      gs.print("User " + grUser.name + " (" + grUser.email + ") was removed from group " + grUserGrMember.group.name);
    }
  } else {
    // If the user is a member of more than 5 groups, print their name and email
    gs.print("User " + grUser.name + " (" + grUser.email + ") is a member of more than 5 groups and will not be removed.");
  }
}

View solution in original post

Gulshehara
Tera Expert

Hi @NishantDhole 

 

Please find below code for above scenario :

// Get all inactive users
var grUser = new GlideRecord('sys_user');
grUser.addQuery('active', false);
grUser.query();

while (grUser.next()) {
  
  // Get the number of groups the user is a member of
  var grUserGrMember = new GlideRecord('sys_user_grmember');
  grUserGrMember.addQuery('user', grUser.sys_id);
  grUserGrMember.query();
  var groupCount = grUserGrMember.getRowCount();
  
  // If the user is a member of less than 5 groups, remove them from their groups
  if (groupCount < 5) {
    grUserGrMember.query();
    while (grUserGrMember.next()) {
      grUserGrMember.deleteRecord();
      gs.print("User " + grUser.name + " (" + grUser.email + ") was removed from group " + grUserGrMember.group.name);
    }
  } else {
    // If the user is a member of more than 5 groups, print their name and email
    gs.print("User " + grUser.name + " (" + grUser.email + ") is a member of more than 5 groups and will not be removed.");
  }
}

View solution in original post

6 REPLIES 6

Hiteish222
Kilo Guru

Hi @NishantDhole ,

for above use case use below script,

// Get all inactive users
var grUser = new GlideRecord('sys_user');
grUser.addQuery('active', false);
grUser.query();

while (grUser.next()) {
  
  // Get the number of groups the user is a member of
  var grUserGrMember = new GlideRecord('sys_user_grmember');
  grUserGrMember.addQuery('user', grUser.sys_id);
  grUserGrMember.query();
  var groupCount = grUserGrMember.getRowCount();
  
  // If the user is a member of less than 5 groups, remove them from their groups
  if (groupCount < 5) {
    grUserGrMember.query();
    while (grUserGrMember.next()) {
      grUserGrMember.deleteRecord();
      gs.print("User " + grUser.name + " (" + grUser.email + ") was removed from group " + grUserGrMember.group.name);
    }
  } else {
    // If the user is a member of more than 5 groups, print their name and email
    gs.print("User " + grUser.name + " (" + grUser.email + ") is a member of more than 5 groups and will not be removed.");
  }
}

Amitoj Wadhera
Kilo Sage

Hi @NishantDhole ,

 

var inactiveUsers = new GlideRecord('sys_user');
inactiveUsers.addQuery('active', false);
inactiveUsers.query();

while (inactiveUsers.next()) {
    var userSysId = inactiveUsers.sys_id;
    var userGroupMembership = new GlideRecord('sys_user_grmember');
    userGroupMembership.addQuery('user', userSysId);
    userGroupMembership.query();

    var groupCount = 0;
    while (userGroupMembership.next()) {
        groupCount++;
    }
    if (groupCount > 5) {
        gs.print('User with more than 5 groups: ' + inactiveUsers.user_name + ' (' + inactiveUsers.email + ')');
    } else {
        userGroupMembership.query();
        while (userGroupMembership.next()) {
            userGroupMembership.deleteRecord();
        }
    }
}

 

If you find my response helpful, please consider marking it as the 'Accepted Solution' and giving it a 'Helpful' rating. Your feedback not only supports the community but also encourages me to continue providing valuable assistance.

 

Thanks,

Amitoj Wadhera

Hi @Amitoj Wadhera ,

 

Consider first user has 5 group count. That time group count condition will not execute and it will delete that record.

Amitoj Wadhera
Kilo Sage

Hi @NishantDhole ,

 

You're correct. 

Here's the revised script:

// Define the query for inactive users
var inactiveUsers = new GlideRecord('sys_user');
inactiveUsers.addQuery('active', false);
inactiveUsers.query();

while (inactiveUsers.next()) {
    var userSysId = inactiveUsers.sys_id;
    var userGroupMembership = new GlideRecord('sys_user_grmember');
    userGroupMembership.addQuery('user', userSysId);
    userGroupMembership.query();

    var groupCount = 0;
    while (userGroupMembership.next()) {
        groupCount++;
    }

    if (groupCount >= 5) {
        // If the user is part of 5 or more groups, print their details
        gs.print('User with 5 or more groups: ' + inactiveUsers.user_name + ' (' + inactiveUsers.email + ')');
    } else {
        // If the user is part of fewer than 5 groups, remove them from all groups
        userGroupMembership.query(); // Re-query to get the records again
        while (userGroupMembership.next()) {
            userGroupMembership.deleteRecord();
        }
    }
}

 

If you find my response helpful, please consider marking it as the 'Accepted Solution' and giving it a 'Helpful' rating. Your feedback not only supports the community but also encourages me to continue providing valuable assistance.

 

Thanks,

Amitoj Wadhera