From a246605337c8761c97b6befa74b31f82e16a573f Mon Sep 17 00:00:00 2001 From: keshava-palisetti Date: Mon, 27 Oct 2025 23:08:39 +0530 Subject: [PATCH 1/3] Create Readme.md Copy Source User Group Memberships to Selected Users --- .../Readme.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Server-Side Components/Background Scripts/Copy Source User Group Memberships to Selected Users/Readme.md 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. From 7931142940b9b956374c600f6a1046cc05da1bb4 Mon Sep 17 00:00:00 2001 From: keshava-palisetti Date: Mon, 27 Oct 2025 23:09:42 +0530 Subject: [PATCH 2/3] ServiceNow Background script code snippet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Copy Source User’s Group Memberships to Selected Users --- ...ser_group_memberships_to_selected_users.js | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Server-Side Components/Background Scripts/Copy Source User Group Memberships to Selected Users/copy_source_user_group_memberships_to_selected_users.js 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..d5a67d055b --- /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 ---'); + From a9981838c0630681265a0f5f9360e30e6c488257 Mon Sep 17 00:00:00 2001 From: keshava-palisetti Date: Mon, 27 Oct 2025 23:12:51 +0530 Subject: [PATCH 3/3] Update copy_source_user_group_memberships_to_selected_users.js Updating the code to remove junk characters --- .../copy_source_user_group_memberships_to_selected_users.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 index d5a67d055b..5c1993c101 100644 --- 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 @@ -39,9 +39,9 @@ for (var i = 0; i < targetUserSysIds.length; i++) { newMember.group = groupId; newMember.insert(); - gs.info('✅ Added user [' + targetUserId + '] to group [' + groupId + ']'); + gs.info('Added user [' + targetUserId + '] to group [' + groupId + ']'); } else { - gs.info('ℹ️ User [' + targetUserId + '] already in group [' + groupId + ']'); + gs.info('User [' + targetUserId + '] already in group [' + groupId + ']'); } } }