diff --git a/Server-Side Components/Background Scripts/Copy Source User Group Memberships to Selected Users/Readme.md b/Server-Side Components/Background Scripts/Copy Source User Group Memberships to Selected Users/Readme.md new file mode 100644 index 0000000000..37994d8378 --- /dev/null +++ b/Server-Side Components/Background Scripts/Copy Source User Group Memberships to Selected Users/Readme.md @@ -0,0 +1,12 @@ +Background Script — Copy Source User’s Groups to Specific Users + +Working: +It retrieves all groups of the source user. +Loops through all active users (except the source). +Checks whether the user is already a member of that group. +If not, it inserts a new record in sys_user_grmember. + +Note: +sourceUserSysId → sys_id of the user whose groups you want to copy. +The 3 entries in targetUserSysIds → sys_ids of the target users. +It checks for duplicates, so no errors even if the user is already in that group. diff --git a/Server-Side Components/Background Scripts/Copy Source User Group Memberships to Selected Users/copy_source_user_group_memberships_to_selected_users.js b/Server-Side Components/Background Scripts/Copy Source User Group Memberships to Selected Users/copy_source_user_group_memberships_to_selected_users.js new file mode 100644 index 0000000000..5c1993c101 --- /dev/null +++ b/Server-Side Components/Background Scripts/Copy Source User Group Memberships to Selected Users/copy_source_user_group_memberships_to_selected_users.js @@ -0,0 +1,50 @@ +// Background script in ServiceNow +// Copies all group memberships from one user to specific other users + +var sourceUserSysId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // sys_id of the source user +var targetUserSysIds = [ + 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', // target user 1 + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', // target user 2 + 'cccccccccccccccccccccccccccccc' // target user 3 +]; + +var sourceGroups = []; + +// Step 1: Fetch all groups of the source user +var grMember = new GlideRecord('sys_user_grmember'); +grMember.addQuery('user', sourceUserSysId); +grMember.query(); + +while (grMember.next()) { + sourceGroups.push(grMember.group.toString()); +} +gs.info('Source user belongs to ' + sourceGroups.length + ' groups.'); + +// Step 2: For each target user, add them to each group (if not already a member) +for (var i = 0; i < targetUserSysIds.length; i++) { + var targetUserId = targetUserSysIds[i]; + + for (var j = 0; j < sourceGroups.length; j++) { + var groupId = sourceGroups[j]; + + var existing = new GlideRecord('sys_user_grmember'); + existing.addQuery('user', targetUserId); + existing.addQuery('group', groupId); + existing.query(); + + if (!existing.next()) { + var newMember = new GlideRecord('sys_user_grmember'); + newMember.initialize(); + newMember.user = targetUserId; + newMember.group = groupId; + newMember.insert(); + + gs.info('Added user [' + targetUserId + '] to group [' + groupId + ']'); + } else { + gs.info('User [' + targetUserId + '] already in group [' + groupId + ']'); + } + } +} + +gs.info('--- Group replication completed successfully ---'); +