Need to remove multiple inactive users from groups
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-12-2018 03:43 AM
Hi All,
I have a requirement to remove inactive users who are all more than 15 days from today from the group member table by using scheduled job. I have written a script for this. But whenever I execute it, It removes only few inactive users from groups..Assume I have 700 Inactive Grp members, first time - 692, second time - 678..Like that, It is working...But I want it in a single shot. Below is My script., Do we have any functionality ? Because I cannot modify the 'slice' each time.
Please post your suggestions.
Thanks In Advance
gs.log("********Removing Inactive Users from Groups********");
var nowdate = gs.now();
var gr=new GlideRecord("sys_user");
gr.addQuery('active', false);
gr.query();
gs.log('RemovingInactive users: ' + gr.getRowCount());
while(gr.next()){
var result = gs.dateDiff(nowdate, gr.u_term_date, false);
var res = result.slice(1,4);
if(res > 15){
//gs.log('Day :' + res);
var grmember = new GlideRecord('sys_user_grmember');
grmember.addQuery('user', gr.sys_id);
grmember.query();
while(grmember.next()){
grmember.deleteMultiple();
grmember.update();
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-12-2018 04:20 AM
If you want to use deleteMultiple the below should work, this assumes the last update made to a user record would be to mark it inactive.
function deleteUsers(){
var gr = new GlideRecord('sys_user_grmember');
gr.addEncodedQuery('user.active=false^user.sys_updated_on<=' + gs.daysAgo(15));
gr.deleteMultiple();
}
If you're going to use while loops you can use deleteRecord()
var gr = new GlideRecord('sys_user');
gr.addEncodedQuery('active=false^sys_updated_on<=' + gs.daysAgo(15));
gr.query();
while(gr.next()){
var gr1 = new GlideRecord('sys_user_grmember');
gr1.addQuery('user', gr.sys_id);
gr1.query();
while(gr1.next()){
gr1.deleteRecord();
}
}
I haven't tested any of this code, you'll probably want to use setWorkflow(false) as well
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-12-2018 05:03 AM
I have check and tried but no luck

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-12-2018 04:21 AM
Hi Arunkumar,
Can you try using below background script (if this is an activity required to be taken care once)
- var gr=new GlideRecord("sys_user");
- gr.addInactiveQuery();
- gr.addQuery('locked_out',true);
- gr.query();
- while(gr.next()){
- var grmember = new GlideRecord('sys_user_grmember');
- grmember.addQuery('user', gr.sys_id);
- grmember.query();
- while(grmember.next()){
- grmember.deleteRecord();
- }
- }

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-12-2018 04:26 AM
Why are you using update after deleteMultiple method? And have you checked the date formats and result value?