Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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