Schedule job removes specific roles if user is not active for 30 days.

Community Alums
Not applicable

Hello,

Facing error on the script of my schedule job the output of the script is all the user has include on removing the roles and that shouldn't be happen the output must only for the users with last login time 30 days ago, Help!

var roleNames = ['sn_incident_write', 'problem_coordinator']; // Define the roles want to remove
getUsers.addQuery('last_login_timeRELATIVELT@dayofweek@ago@30');
getUsers.query();

while (getUsers.next()) {
    roleNames.forEach(function(roleName) {
        // Query to get the sys_id of the role
        var roleGr = new GlideRecord('sys_user_role');
        roleGr.addQuery('name', roleName);
        roleGr.query();

        if (roleGr.next()) {
            var userRoleGr = new GlideRecord('sys_user_has_role');
            userRoleGr.addQuery('role', roleGr.sys_id) ||
                userRoleGr.query();

            while (userRoleGr.next()) {
                // Delete the user’s role
                userRoleGr.deleteRecord();
                gs.info('Removed role ' + roleName + ' from user ' + userRoleGr.user.getDisplayValue());
            }
        } else {
            gs.warn('Role ' + roleName + ' not found');
        }
    });
}
2 ACCEPTED SOLUTIONS

Amit Pandey
Kilo Sage

Hi @Community Alums 

 

var roleNames = ['sn_incident_write', 'problem_coordinator'];
var getUsers = new GlideRecord('sys_user');
getUsers.addQuery('last_login', '<=', gs.beginningOfLast30Days());
getUsers.query();

while (getUsers.next()) {
    roleNames.forEach(function(roleName) {
        var roleGr = new GlideRecord('sys_user_role');
        roleGr.addQuery('name', roleName);
        roleGr.query();

        if (roleGr.next()) {
            var userRoleGr = new GlideRecord('sys_user_has_role');
            userRoleGr.addQuery('role', roleGr.sys_id);
            userRoleGr.addQuery('user', getUsers.sys_id);
            userRoleGr.query();

            while (userRoleGr.next()) {
                userRoleGr.deleteRecord();
}

 

Can you try above? Have used last_login instead of last_login_time.

 

Regards,

Amit

 

 

View solution in original post

Ranjit Nimbalka
Mega Sage

Hi @Community Alums ,

 

please try with below script;-

var roleNames = ['sn_incident_write', 'problem_coordinator'];
var getUsers = new GlideRecord('sys_user');
getUsers.addQuery('last_login', '<=', gs.beginningOfLast30Days());
getUsers.query();

while (getUsers.next()) {
    roleNames.forEach(function(roleName) {
        var roleGr = new GlideRecord('sys_user_role');
        roleGr.addQuery('name', roleName);
        roleGr.query();

        if (roleGr.next()) {
            var userRoleGr = new GlideRecord('sys_user_has_role');
            userRoleGr.addQuery('role', roleGr.sys_id);
            userRoleGr.addQuery('user', getUsers.sys_id);
            userRoleGr.query();

            while (userRoleGr.next()) {
                userRoleGr.deleteRecord();
			}
		}
	});
}

If my answer has helped with your question, please mark my answer as accepted solution and give a thumb up.
Regards,
Ranjit

View solution in original post

2 REPLIES 2

Amit Pandey
Kilo Sage

Hi @Community Alums 

 

var roleNames = ['sn_incident_write', 'problem_coordinator'];
var getUsers = new GlideRecord('sys_user');
getUsers.addQuery('last_login', '<=', gs.beginningOfLast30Days());
getUsers.query();

while (getUsers.next()) {
    roleNames.forEach(function(roleName) {
        var roleGr = new GlideRecord('sys_user_role');
        roleGr.addQuery('name', roleName);
        roleGr.query();

        if (roleGr.next()) {
            var userRoleGr = new GlideRecord('sys_user_has_role');
            userRoleGr.addQuery('role', roleGr.sys_id);
            userRoleGr.addQuery('user', getUsers.sys_id);
            userRoleGr.query();

            while (userRoleGr.next()) {
                userRoleGr.deleteRecord();
}

 

Can you try above? Have used last_login instead of last_login_time.

 

Regards,

Amit

 

 

Ranjit Nimbalka
Mega Sage

Hi @Community Alums ,

 

please try with below script;-

var roleNames = ['sn_incident_write', 'problem_coordinator'];
var getUsers = new GlideRecord('sys_user');
getUsers.addQuery('last_login', '<=', gs.beginningOfLast30Days());
getUsers.query();

while (getUsers.next()) {
    roleNames.forEach(function(roleName) {
        var roleGr = new GlideRecord('sys_user_role');
        roleGr.addQuery('name', roleName);
        roleGr.query();

        if (roleGr.next()) {
            var userRoleGr = new GlideRecord('sys_user_has_role');
            userRoleGr.addQuery('role', roleGr.sys_id);
            userRoleGr.addQuery('user', getUsers.sys_id);
            userRoleGr.query();

            while (userRoleGr.next()) {
                userRoleGr.deleteRecord();
			}
		}
	});
}

If my answer has helped with your question, please mark my answer as accepted solution and give a thumb up.
Regards,
Ranjit