From 5d434bfa9d0e026eb721c0cce4848489f85e2a09 Mon Sep 17 00:00:00 2001 From: Gangadhar Ravi Bandaru Date: Mon, 6 Oct 2025 20:01:48 -0400 Subject: [PATCH 1/3] Create readme.md --- Background Scripts/Clone User Groups/readme.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Background Scripts/Clone User Groups/readme.md diff --git a/Background Scripts/Clone User Groups/readme.md b/Background Scripts/Clone User Groups/readme.md new file mode 100644 index 0000000000..f26532c3aa --- /dev/null +++ b/Background Scripts/Clone User Groups/readme.md @@ -0,0 +1 @@ +This ServiceNow Background Script copies all group memberships from one user to another. It checks for duplicates and logs all actions.https://github.com/github-copilot/signup From 27f657c37ca6bea3f7314227c8cc42aa1899403d Mon Sep 17 00:00:00 2001 From: Gangadhar Ravi Bandaru Date: Mon, 6 Oct 2025 20:02:37 -0400 Subject: [PATCH 2/3] Create cloneUserGroups.js --- .../Clone User Groups/cloneUserGroups.js | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Background Scripts/Clone User Groups/cloneUserGroups.js diff --git a/Background Scripts/Clone User Groups/cloneUserGroups.js b/Background Scripts/Clone User Groups/cloneUserGroups.js new file mode 100644 index 0000000000..1a5a32031a --- /dev/null +++ b/Background Scripts/Clone User Groups/cloneUserGroups.js @@ -0,0 +1,55 @@ +(function() { + // Replace with the sys_ids of the users + var sourceUserSysId = 'SOURCE_USER_SYS_ID'; // Copy groups from this user + var targetUserSysId = 'TARGET_USER_SYS_ID'; // Copy groups to this user + + // Validate both users exist + var sourceUser = new GlideRecord('sys_user'); + if (!sourceUser.get(sourceUserSysId)) { + gs.error('Source user not found: ' + sourceUserSysId); + return; + } + + var targetUser = new GlideRecord('sys_user'); + if (!targetUser.get(targetUserSysId)) { + gs.error('Target user not found: ' + targetUserSysId); + return; + } + + gs.info('Cloning group memberships from ' + sourceUser.name + ' to ' + targetUser.name); + + var addedCount = 0; + var skippedCount = 0; + + var srcGroups = new GlideRecord('sys_user_grmember'); + srcGroups.addQuery('user', sourceUserSysId); + srcGroups.query(); + + while (srcGroups.next()) { + var groupId = srcGroups.group.toString(); + + // Check if target user is already in the group + var existing = new GlideRecord('sys_user_grmember'); + existing.addQuery('user', targetUserSysId); + existing.addQuery('group', groupId); + existing.query(); + + if (existing.next()) { + skippedCount++; + gs.info('Skipped: ' + targetUser.name + ' is already a member of group ' + srcGroups.group.name); + continue; + } + + // Add target user to the group + var newMember = new GlideRecord('sys_user_grmember'); + newMember.initialize(); + newMember.user = targetUserSysId; + newMember.group = groupId; + newMember.insert(); + + gs.info('Added ' + targetUser.name + ' to group ' + srcGroups.group.name); + addedCount++; + } + + gs.info('Group cloning complete. ' + addedCount + ' groups added, ' + skippedCount + ' skipped.'); +})(); From 2425c770b211d8ea359269474a285fbb49966aed Mon Sep 17 00:00:00 2001 From: Gangadhar Ravi Bandaru Date: Mon, 6 Oct 2025 20:14:22 -0400 Subject: [PATCH 3/3] Update readme.md --- Background Scripts/Clone User Groups/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Background Scripts/Clone User Groups/readme.md b/Background Scripts/Clone User Groups/readme.md index f26532c3aa..b87efe067f 100644 --- a/Background Scripts/Clone User Groups/readme.md +++ b/Background Scripts/Clone User Groups/readme.md @@ -1 +1 @@ -This ServiceNow Background Script copies all group memberships from one user to another. It checks for duplicates and logs all actions.https://github.com/github-copilot/signup +This ServiceNow Background Script copies all group memberships from one user to another. It checks for duplicates and logs all actions.